bal*_*aji 46 sql database greatest-n-per-group
我想要一个SQL语句来获取具有最小值的行.
考虑一下这个表:
id game point
1 x 5
1 z 4
2 y 6
3 x 2
3 y 5
3 z 8
Run Code Online (Sandbox Code Playgroud)
如何选择列中具有最小值的ID point,按游戏分组?像这样:
id game point
1 z 4
2 y 5
3 x 2
Run Code Online (Sandbox Code Playgroud)
小智 52
使用:
SELECT tbl.*
FROM TableName tbl
INNER JOIN
(
SELECT Id, MIN(Point) MinPoint
FROM TableName
GROUP BY Id
) tbl1
ON tbl1.id = tbl.id
WHERE tbl1.MinPoint = tbl.Point
Run Code Online (Sandbox Code Playgroud)
Shi*_*roy 16
这是做同样事情的另一种方式,它可以让你做一些有趣的事情,比如选择前5名获胜游戏等.
SELECT *
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Point) as RowNum, *
FROM Table
) X
WHERE RowNum = 1
Run Code Online (Sandbox Code Playgroud)
您现在可以正确获取被识别为分数最低的行的实际行,并且您可以修改排序函数以使用多个条件,例如"向我显示分数最小的最早的游戏"等.
Asp*_*ant 15
这会奏效
select * from table
where (id,point) IN (select id,min(point) from table group by id);
Run Code Online (Sandbox Code Playgroud)
a_h*_*ame 12
由于sql仅标记了以下内容,因此以下是使用ANSI SQL和窗口函数:
select id, game, point
from (
select id, game, point,
row_number() over (partition by game order by point) as rn
from games
) t
where rn = 1;
Run Code Online (Sandbox Code Playgroud)