【问题标题】:Getting this group by and max query to work让这个 group by 和 max 查询工作
【发布时间】:2015-06-12 11:11:48
【问题描述】:

我有下表players 和:

ID;color;race;score
1;"red";"elf";400
2;"blue";"elf";500
3;"green";"elf";300
4;"blue";"elf";200
5;"red";"elf";700
6;"red";"troll";100
7;"blue";"troll";400
8;"green";"troll";500
9;"red";"troll";400
10;"yellow";"troll";1000
11;"red";"nord";900
12;"green";"nord";100
13;"yellow";"nord";500
14;"blue";"nord";7000

我想要每场比赛的最高分数以及该球员的颜色和 ID。像这样

elf 700 red 5
nord 7000 blue 14
troll 1000 yellow 10

我可以得到的前两列:

select category,max(score)
from players
group by category;

但我无法添加该玩家的颜色和 ID。我该怎么做?

【问题讨论】:

标签: postgresql max groupwise-maximum


【解决方案1】:

你可以使用RANK函数:

WITH cte AS
(
  SELECT *, RANK() OVER(PARTITION BY race ORDER BY score DESC) AS r
  FROM players
)
SELECT race, score, color, id
FROM cte
WHERE r = 1;

LiveDemo

输出:

╔═══════╦═══════╦════════╦════╗
║ race  ║ score ║ color  ║ id ║
╠═══════╬═══════╬════════╬════╣
║ elf   ║   700 ║ red    ║  5 ║
║ nord  ║  7000 ║ blue   ║ 14 ║
║ troll ║  1000 ║ yellow ║ 10 ║
╚═══════╩═══════╩════════╩════╝

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2015-12-10
    • 1970-01-01
    • 2020-10-28
    相关资源
    最近更新 更多