gpt4 book ai didi

mysql - SQL 查询返回一列 "grouped"另一列的三个最高值

转载 作者:可可西里 更新时间:2023-11-01 07:50:01 26 4
gpt4 key购买 nike

假设我有一个这样的表:

Player  Score
A 5
B 4
A 3
B 2
A 1
B 1
A 2
B 3
A 4
B 5

我需要一个 SQL 查询,它将按玩家“分组”的降序返回每个玩家的三个最高分数,即

Player  Score
A 5
A 4
A 3
B 5
B 4
B 3

非常感谢任何指点。

最佳答案

这是一种老式的(阅读:基本 sql)方法,可以生成每组前 n 名。您可以在组条件下将表加入自身(这里是玩家)并在右侧选择得分较高的记录;如果有三个或更少这样的记录,则该行是每组前 n 行之一。

select player.player, player.score
from Player
left join Player p2
on p2.player = player.player
and p2.score > player.score
group by player.player, player.score
having count(distinct p2.score) < 3
order by 1, 2 desc

您可能会检查的替代版本,使用不存在:

select player, score
from player
where not exists
(
select p2.player
from Player p2
where p2.player = player.player
and p2.score > player.score
group by p2.player
having count(distinct p2.score) > 3
)
order by 1, 2 desc

这两个版本在关系的表示上有所不同——第一个版本返回一行(根据分组依据的性质)并且需要连接回原始表格以显示所有记录,第二个版本直接从原始表格显示所有数据和立即联系。

你可以找到Demo at Sql Fiddle .

关于mysql - SQL 查询返回一列 "grouped"另一列的三个最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com