如何对重复的对进行分组并在其上写查询?

时间:2018-10-29 02:33:09

标签: 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. 继续询问是否有其他现有的货币对

所以我假设我需要编写的查询需要以某种方式显示在多行中的第一组对。我该怎么办?

1 个答案:

答案 0 :(得分:2)

所以您会这样做:

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(*);