我正在挑战这个问题.我有一张桌子,它叫:结果.共有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

我必须 for each 名称找到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

因此,我try 这样编写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; 

Sql相关问答推荐

PostgreSQL:获取每家店铺收入最高的员工

更新在两个或多个面中具有交点的面

正在编写查询.我需要将订阅的时间段分为第一个订阅中包含的另一个订阅之前和之后的时间段

来自按PostgreSQL分组的最小日期

PostgreSQL-按距离阈值挤压相邻行的性能

如何在Postgres中为单值输入多行?

获取分布在同一行的列中的出现次数

SQL根据另一列的顺序和值获取组中的最后一列

如何根据创建日期查找两个表中最接近的记录?

通过ID和数据找到每个不同的值

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

如何为给定的股票数据集计算利润/亏损,确保先卖出先买入的股票

Oracle PL/SQL长期运行问题

查询中获取审批者不起作用

雅典娜弄错了操作顺序

如何 Select 一列具有最小值而另一列具有给定值的记录?

如何在 RavenDB Studio (RQL) 中插入更新文档

我现在如何显示重复的汽车? postgresql

运算符不存在:integer = bigint[]

如何优化sql请求?