mysql - 如何对重复的对进行分组并对它们编写查询?

标签 mysql sql group-by

假设我有下表

Fruit  |   Price   |   Fruit   |   Price   |   State 
-----------------------------------------------------
apple  |     4     |   banana  |     3     |     NY
apple  |     6     |   banana  |     5     |     CA
apple  |     1     |   banana  |     2     |     PA
orange |     4     |   pear    |     5     |     FL
orange |     3     |   pear    |     4     |     OH

我想问以下问题:

在所有州,fruit1 的价格都比 fruit2 贵吗?

所以对所有配对都问这个问题。

  1. 在所有州,苹果的价格都比香蕉贵吗?

  2. 在所有州,橙色的价格都比贵吗?

  3. 继续询问任何其他现有对

所以我假设我需要编写的查询需要以某种方式首先对出现在多行中的对进行分组。我该怎么做?

最佳答案

所以你会这样做:

select fruit1, fruit2
from t
group by fruit1, fruit2
having sum(price1 > price2) = count(*);

即进行聚合。计算水果 1 的价格大于水果 2 的价格的次数。如果这始终为真,则计数等于总计数。

如果数据全部在一张表中:

select t1.fruit, t2.fruit
from t t1 join
     t t2
     on t1.state = t2.state and t1.fruit <> t2.fruit
group by t1.fruit, t2.fruit
having sum(t1.price > t2.price) = count(*);

关于mysql - 如何对重复的对进行分组并对它们编写查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53037990/

相关文章:

mysql - 创建外键的问题

MySQL 聚合查询未按预期运行

mysql - 仅当列不为空时才匹配列

php - 在 PHP 中计算事件非事件删除结果

mysql - MySQL中样本之间的划分

Python pandas 按类别分组占总数的百分比

python - pyspark 在分组的 applyInPandas 中添加多列(更改架构)

group-by - 如何对维度内的选项进行分组?

MySql存储过程,逻辑上或物理上删除依赖于现有表引用的记录

MySQL:使用 NOT EXISTS 子查询优化查询