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

Cha*_*les 12 mysql sql

嘿,我有一个SQL查询的问题.让我们以此示例数据为例

itemID  catID  attrib1  attrib2
  1       1       10       5   
  2       1       10       7
  3       1        5      10
  4       2       18      15
Run Code Online (Sandbox Code Playgroud)

我想为每个类别返回最佳项目(attrib1优先于attrib2)

显然,"SELECT catID,MAX(attrib1),MAX(attrib2)FROM test_table GROUP BY catID"不起作用,因为它将为第一只猫返回10和10.

那么有没有告诉MySQL从attrib2行中选择最大值但只考虑attrib1也是最大值的那些?即返回以下数据

 catID  attrib1  attrib2
   1       10       7   
   2       18      15
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 7

您可以获得最佳的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
Run Code Online (Sandbox Code Playgroud)