一尘不染

SQL:在多列上使用GROUP BY和MAX

mysql

嘿,我有一个SQL查询问题。让我们以这个示例数据为例

itemID  catID  attrib1  attrib2
  1       1       10       5   
  2       1       10       7
  3       1        5      10
  4       2       18      15

我想返回每个类别的最佳商品(attrib1优先于attrib2)

显然,“从test_table GROUP BY catID中选择SELECT
catID,MAX(attrib1),MAX(attrib2)”不起作用,因为它将为第一只猫返回10和10。

那么,有没有办法告诉MySQL从attrib2行中选择最大值,而仅考虑attrib1也是最大值的那些呢?即返回以下数据

 catID  attrib1  attrib2
   1       10       7   
   2       18      15

阅读 952

收藏
2020-05-17

共1个答案

一尘不染

您可以获取最佳的attrib1值,然后加入attrib2值,并为每个attrib1值获取最佳值:

select t2.catID, t2.attrib1, max(t2.attrib2)
from
(
  select catID, max(attrib1) as attrib1
  from test_table
  group by catID
) t1
inner join test_table t2 on t2.catID = t1.catID and t2.attrib1 = t1.attrib1
group by t2.catID, t2.attrib1
2020-05-17