Sql 如何根据具体情况选择前五名记录
我在下面给出了一张表Sql 如何根据具体情况选择前五名记录,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我在下面给出了一张表 ID NAME 1 100 2 90 3 80 4 70 5 60 6 60 7 60 若表中的第6条和第7条记录的值与第5条相同,则返回第6条和第7条。但如果它与第5条不同,那么它将只返回前5条记录 提前感谢 假设您需要5个最重要的唯一值,您可以使用 工作小提琴:试试这个 SELECT ID, Name FROM dbo.Tablename WHERE Name IN (SELECT TOP 5 Name FROM dbo.Tablename
ID NAME
1 100
2 90
3 80
4 70
5 60
6 60
7 60
若表中的第6条和第7条记录的值与第5条相同,则返回第6条和第7条。但如果它与第5条不同,那么它将只返回前5条记录
提前感谢 假设您需要5个最重要的唯一值,您可以使用 工作小提琴:试试这个
SELECT ID, Name
FROM dbo.Tablename
WHERE Name IN (SELECT TOP 5 Name FROM dbo.Tablename order by Name desc)
order by Name desc
您还可以使用类似于稠密_秩的秩
尝试下面的查询-
select id,name from
(select id, name, RANK() OVER(ORDER BY Name DESC) as r from yourtbl) t
where r<=5
这是否仅适用于第6条和第7条记录?如果名称在第1-4个ID组中重复而不是在最后一个ID组中重复,该怎么办?例如,如果ID=1和ID=2会有相同的名称?这算是一行还是两行?是的,这仅适用于第6行和第7行。这仅适用于样本数据意外按名称DESC排序。此外,ID决定顺序。这仅适用于样本数据意外按名称DESC排序。此外,ID决定顺序,只有在前n名的最后一个,才应该使用全名组。但是ID决定了顺序。
select id,name from
(select id, name, RANK() OVER(ORDER BY Name DESC) as r from yourtbl) t
where r<=5
select top 5 WITH TIES id, name from t order by name desc