2012-01-09 73 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