SQL:排序数据后得到数据集的排名

Elm*_*lmi 3 sql sorting

我有一个简单的表,其中包含唯一标识符和每个标识符的计数器值.我需要得到的结果是表格按计数器值排序后特定标识符的位置.

我目前的解决方案是在对结果进行排序时对所有数据执行SELECT,然后通过结果列表查找所需的标识符,我发现它的位置是我想要的排名值.

不幸的是,这需要大型表的大量内存和计算时间.所以我的问题是:是否有一个SQL语句在表被排序后返回特定标识符的位置?

mar*_*c_s 5

如果您使用的是SQL Server 2005及更高版本,则可以使用RANK()DENSE_RANK()窗口函数:

SELECT
   (your list of columns here),
   RANK() OVER(ORDER BY yourcolumnnamehere)
FROM dbo.YourTable
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT
   (your list of columns here),
   DENSE_RANK() OVER(ORDER BY yourcolumnnamehere)
FROM dbo.YourTable
Run Code Online (Sandbox Code Playgroud)

请参阅此处有关RANK和DENSE_RANK之间差异的说明

其他RDBMS(如Oracle)似乎也支持那些窗口函数.