使用“groupby”时如何返回多列?

avwztpqn  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(317)

假设我有以下数据:

itemID  catID   score     age
  1       1        9       5   
  2       1       10       7
  3       1        5      10
  4       2       18      11
  5       2       15      15

我想返回年龄列,每个类别的最大分数:

catID    score    age
   1       10       7   
   2       18      11

我有以下疑问:

select catID, max(score)
from items
group by catID

但我也不知道怎么把年龄列进去。

tvmytwxo

tvmytwxo1#

你在这里追求的不是什么 score 但是得分最高的人的细节。你可以用cte和 ROW_NUMBER 要实现这一点:

WITH CTE AS(
    SELECT catID,
           score,
           age,
           ROW_NUMBER() OVER (PARTITION BY catID ORDER BY score DESC) AS RN
    FROM items)
SELECT catID,
       score,
       age
FROM CTE
WHERE RN = 1;

如果多个人可以拥有相同的分数,而您希望将他们全部退回,请替换 ROW_NUMBERDENSE_RANK .

nbewdwxp

nbewdwxp2#

你需要一个连接的子项的amx分数

select i.catID, i.score, i.age
    from   items i
    INNER JOIN  (
        select catID, max(score) score 
        from items
        group by catID

        ) t on t.catID = i.CatID and t.score = i.score

相关问题