實(shí)例講解sql server排名函數(shù)DENSE_RANK的用法
一、需求
之前sql server 的排名函數(shù)用得最多的應(yīng)該是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 來實(shí)現(xiàn)分頁(yè);今天逛園,看到另一個(gè)內(nèi)置排名函數(shù)還不錯(cuò),自己順便想了一個(gè)需求,大家可以花1分鐘先想想要怎么實(shí)現(xiàn)。
需求很簡(jiǎn)單:求成績(jī)排名前五的學(xué)生信息。
例如:
由于成績(jī)可以并列,所以前五名可能有多個(gè)。例如:
測(cè)試數(shù)據(jù):
declare @t table (ID int, StudentName nvarchar(15), Score int) insert into @t select 1,'黃一',99 union all select 2,'吳二',99 union all select 3,'張三',99 union all select 4,'李四',98 union all select 5,'王五',97 union all select 6,'趙六',96 union all select 7,'田七',95 union all select 8,'紀(jì)八',94 union all select 9,'邱九',93 union all select 10,'林十',92
二、自己實(shí)現(xiàn)
我的想法:既然可能出現(xiàn)并列,那么就用 DISTINCT 找到前五的成績(jī)。ok,代碼如下:
select t1.* from @t t1 join(select distinct top 5 Score from @t order by Score desc) t2 on t1.Score = t2.Score
看起來和上面的要求的結(jié)果還是不太一樣,少了排序,當(dāng)然我們可以在程序處理,這不是問題。
三、使用內(nèi)置排名函數(shù) DENSE_RANK
其實(shí)sql server已經(jīng)內(nèi)置了這樣的函數(shù)可以幫助我們輕松實(shí)現(xiàn),ok,直接上代碼:
;with cte as( select dense_rank() over(order by Score desc) rank,* from @t ) select * from cte where rank < 6
四、擴(kuò)展,內(nèi)置排名函數(shù)RANK
與 DENSE_RANK類似還有一個(gè)RANK函數(shù),不過RANK函數(shù)不會(huì)順序排名,而是根據(jù)序號(hào)排。有點(diǎn)繞,把上面的函數(shù)改為RANK()就知道了,得到的結(jié)果如下:
以上就是sql server排名函數(shù)DENSE_RANK的使用方法,分享了自己的一些想法,希望對(duì)大家的學(xué)習(xí)有所啟發(fā)。
相關(guān)文章
SQLserver查詢數(shù)據(jù)類型為ntext是空或NULL值的方法
SQLserver查詢數(shù)據(jù)類型為ntext是空或NULL值的方法2010-07-07SQL批量插入數(shù)據(jù)幾種方案的性能詳細(xì)對(duì)比
昨天下午快下班的時(shí)候,無意中聽到公司兩位同事在探討批量向數(shù)據(jù)庫(kù)插入數(shù)據(jù)的性能優(yōu)化問題,頓時(shí)來了興趣,把自己的想法向兩位同事說了一下,于是有了本文。2010-03-03sql server中的任務(wù)調(diào)度與CPU深入講解
這篇文章主要給大家介紹了關(guān)于sql server中任務(wù)調(diào)度與CPU的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05sqlserverdriver配置方法 jdbc連接sqlserver
這篇文章主要介紹了sqlserverdriver配置方法,介紹了連接SqlServer2000 和連接SqlServer2005的方法,大家參考使用吧2014-01-01基于SQL Server中char,nchar,varchar,nvarchar的使用區(qū)別
對(duì)于程序中的一般字符串類型的字段,SQL Server中有char、varchar、nchar、nvarchar四種類型來對(duì)應(yīng),那么這四種類型有什么區(qū)別呢,這里做一下對(duì)比2013-05-05