PostgresSQL-根据另一列找到 3 个最低值 [重复]

问题描述 投票:0回答:1

我正在挑战这个问题。我有一个表调用:结果。有 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

但是不行(输出错误)。你知道我该如何解决这个问题吗?谢谢

问候

sql postgresql group-by min
1个回答
1
投票

假设你不关心领带,你可以在这里使用

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; 
© www.soinside.com 2019 - 2024. All rights reserved.