Microsoft SQL server选择前N个组
关于如何从每组中选择n行,有很多答案。 但我要找的是从top N group中选择每一行,例如,我有以下数据:Microsoft SQL server选择前N个组,sql,sql-server,sql-server-2008,select,Sql,Sql Server,Sql Server 2008,Select,关于如何从每组中选择n行,有很多答案。 但我要找的是从top N group中选择每一行,例如,我有以下数据: id group 1 a 2 a 3 b 4 c 5 c 6 d 7 d ....... 如果我想选择前三名,我的预期结果如下: 1 a 2 a 3 b 4 c 5 c 如何使用Microsoft SQL server 2008实
id group
1 a
2 a
3 b
4 c
5 c
6 d
7 d
.......
如果我想选择前三名,我的预期结果如下:
1 a
2 a
3 b
4 c
5 c
如何使用Microsoft SQL server 2008实现这一点?一个选项是使用子查询选择前N个组:
SELECT t1.id, t1.group
FROM yourTable t1
INNER JOIN
(
SELECT DISTINCT TOP(N) group
FROM yourTable
ORDER BY group
) t2
ON t1.group = t2.group
您可以按组选择行,然后只选择前三名:
SELECT [id], [group]
FROM (SELECT [id], [group], RANK() OVER (ORDER BY [group] ASC) rk
FROM mytable) t
WHERE rk <= 3
@蒂姆:我刚刚修改了你的查询
SELECT t1.id, t1.group
FROM yourTable t1
INNER JOIN
(
SELECT TOP N group
FROM yourTable
GROUP BY group
--ORDER BY group USE IT IF YOU WANT
) t2
ON t1.group = t2.group
是否应该用“组”替换“按订单”BY@TheShooter我使用DISTINCT查找前N个组。另一种方法是使用GROUP BY,而不使用DISTINCT.Agreed。不应该错过:谢谢@TimBiegeleisen的指导:注意:不要使用组。