我正在挑战这个问题。我有一个表调用:结果。有 3 列,如下所示(id 列是 int,city 是 varchar,score 是 int):
id name score
1 x 5
2 x 9
3 x 10
5 x 2
85 y 20
2 y 1
9 z 98
2 z 6
7 z 93
10 z 9
我必须为每个名称找到 3 个最低值,所以输出应该是这样的:
id name score
1 x 5
2 x 9
5 x 2
85 y 20
2 y 1
2 z 6
7 z 93
10 z 9
所以我试着写这样的sql查询:
SELECT id, name, score
FROM results
GROUP BY name
ORDER BY score DESC
LIMIT 3
但是不行(输出错误)。你知道我该如何解决这个问题吗?谢谢
问候
假设你不关心领带,你可以在这里使用
ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY score) rn
FROM results
)
SELECT id, name, score
FROM cte
WHERE rn <= 3
ORDER BY name;