繁体   English   中英

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

[英]SQL : Using GROUP BY and MAX on multiple columns

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

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

我想为每个类别返回最好的项目(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

您可以获得最好的 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

使用:

SELECT x.catid,
       x.max_attrib1 AS attrib1,
       (SELECT MAX(attrib2)
          FROM YOUR_TABLE y
         WHERE y.catid = x.catid
           AND y.attrib1 = x.max_attrib1) AS attrib2
  FROM (SELECT t.catid,
               MAX(t.attrib1) AS max_attrib1
          FROM YOUR_TABLE t
      GROUP BY t.catid) x
SELECT tt.catId, tt.attrib1, MAX(tt.attrib2)
FROM   test_table tt
GROUP BY tt.catID, tt.attrib1
WHERE  tt.attrib1 = (SELECT MAX(t2.attrib1) FROM test_table t2 WHERE t2.catID = tt.catID)
SELECT catID, max1, max2 FROM
((SELECT Max(attrib1) as max1, catID GROUP BY attrib1) as t1
INNER JOIN
(SELECT MAX(attrib2) as max2, catID GROUP BY attrib2) as t2
ON t1.catID = t2.catID) as t3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM