2006/09/03

MS SQL 2005 Ranking函數的使用

建立測試資料表
CREATE TABLE [dbo].[testScore](
[StdName] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
[CourseName] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
[Score] [int] NULL
) ON [PRIMARY]

裡頭資料如下:
StdName CourseName Score
AAA A 60
Joe A 100
BBB A 70
CCC A 50
DDD A 20
EEE A 10
Joe B 20
CCC B 90
DDD B 70
EEE B 10

使用Rank函數進行排名
SELECT StdName, CourseName, Rank() OVER (Partition BY CourseName
ORDER BY Score DESC) AS Rank
FROM dbo.testScore

執行結果:
StdName CourseName Rank
Joe A 1
BBB A 2
AAA A 3
CCC A 4
DDD A 5
EEE A 6
CCC B 1
DDD B 2
Joe B 3
EEE B 4


其中Ranking的函數還有下列幾種:
RANK() 不連續排名(有2個第一名,接下來會出現第3名)
DENSE_RANK() 連續排名
ROW_NUMBER() 傳回列號,搭配OVER(Order By..),可做分頁使用。
NTILE(n) 分成n個群組,並傳回該組編號(8筆分3組=111,222,33)

1 則留言:

Csc 提到...

好炫的東西...

My World