2012-01-09 64 views
3

我有一个包含唯一标识符,并为他们每个人的计数器值一个简单的表格后得到一个数据集的等级。我需要得到的结果是表格按计数器值排序后,特定标识符的位置。SQL:排序数据

我目前的解决办法是做一个SELECT所有数据,而排序的结果,那么经历的结果列表中找到所需要的标识,在那里我发现这是排名值我想要得到的位置。

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

+3

**的数据库**和您使用的是什么版本? “SQL”不是**数据库系统 - 它只是许多数据库系统使用的结构化查询语言。这类事情往往是供应商特定的,所以我们需要知道你的环境..... – 2012-01-09 07:18:55

回答

4

如果您使用SQL Server 2005和更新,你可以使用RANK()DENSE_RANK()窗口函数:

SELECT 
    (your list of columns here), 
    RANK() OVER(ORDER BY yourcolumnnamehere) 
FROM dbo.YourTable 

或:

SELECT 
    (your list of columns here), 
    DENSE_RANK() OVER(ORDER BY yourcolumnnamehere) 
FROM dbo.YourTable 

explanation of difference between RANK and DENSE_RANK here

其他RDBMS(像甲骨文)似乎也支持这些窗口功能。

+1

您可以添加[PostgreSQL的8.4+(http://www.postgresql.org/docs/8.4/static/functions- window.html)列表中,窗口功能非常棒。 – 2012-01-09 07:31:14

+0

你知道如果MySQL有可能吗?谢谢 – BDeliers 2017-05-24 14:01:45