国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

實例講解sql server排名函數(shù)DENSE_RANK的用法

2024-08-31 01:03:45
字體:
來源:轉載
供稿:網(wǎng)友
這篇文章主要以一個實例講解了sql server排名函數(shù)DENSE_RANK的用法,感興趣的小伙伴們可以參考一下
 

一、需求

  之前sql server 的排名函數(shù)用得最多的應該是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 來實現(xiàn)分頁;今天逛園,看到另一個內(nèi)置排名函數(shù)還不錯,自己順便想了一個需求,大家可以花1分鐘先想想要怎么實現(xiàn)。

  需求很簡單:求成績排名前五的學生信息。

  例如:

  sql server,排名函數(shù),DENSE_RANK

  由于成績可以并列,所以前五名可能有多個。例如:

    sql server,排名函數(shù),DENSE_RANK

  測試數(shù)據(jù):  

declare @t table(ID int, StudentName nvarchar(15), Score int) insert into @tselect 1,'黃一',99 union allselect 2,'吳二',99 union allselect 3,'張三',99 union allselect 4,'李四',98 union allselect 5,'王五',97 union allselect 6,'趙六',96 union allselect 7,'田七',95 union allselect 8,'紀八',94 union allselect 9,'邱九',93 union allselect 10,'林十',92 

二、自己實現(xiàn)

  我的想法:既然可能出現(xiàn)并列,那么就用 DISTINCT 找到前五的成績。ok,代碼如下:

select t1.* from @t t1join(select distinct top 5 Score from @t order by Score desc) t2on t1.Score = t2.Score    

  看起來和上面的要求的結果還是不太一樣,少了排序,當然我們可以在程序處理,這不是問題。

三、使用內(nèi)置排名函數(shù) DENSE_RANK

  其實sql server已經(jīng)內(nèi)置了這樣的函數(shù)可以幫助我們輕松實現(xiàn),ok,直接上代碼:

;with cte as(  select dense_rank() over(order by Score desc) rank,* from @t)select * from cte where rank < 6   

 四、擴展,內(nèi)置排名函數(shù)RANK

  與 DENSE_RANK類似還有一個RANK函數(shù),不過RANK函數(shù)不會順序排名,而是根據(jù)序號排。有點繞,把上面的函數(shù)改為RANK()就知道了,得到的結果如下:

  sql server,排名函數(shù),DENSE_RANK

以上就是sql server排名函數(shù)DENSE_RANK的使用方法,分享了自己的一些想法,希望對大家的學習有所啟發(fā)。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成武县| 阜南县| 连州市| 平潭县| 高尔夫| 阿拉善左旗| 安义县| 洪洞县| 镇雄县| 都安| 旅游| 行唐县| 高邑县| 观塘区| 莲花县| 博乐市| 宝兴县| 普格县| 凤翔县| 城口县| 合江县| 米林县| 明溪县| 石棉县| 塘沽区| 临清市| 杭锦后旗| 灵台县| 垣曲县| 临澧县| 博罗县| 大关县| 溆浦县| 紫阳县| 大渡口区| 利川市| 栾城县| 蒙阴县| 海伦市| 如皋市| 临邑县|