程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 實例講授sql server排名函數DENSE_RANK的用法

實例講授sql server排名函數DENSE_RANK的用法

編輯:MSSQL

實例講授sql server排名函數DENSE_RANK的用法。本站提示廣大學習愛好者:(實例講授sql server排名函數DENSE_RANK的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是實例講授sql server排名函數DENSE_RANK的用法正文


1、需求

  之前sql server 的排名函數用得最多的應當是RoW_NUMBER()了,我平日用ROW_NUMBER() + CTE 來完成分頁;明天逛園,看到另外一個內置排名函數還不錯,本身趁便想了一個需求,年夜家可以花1分鐘先想一想要怎樣完成。

  需求很簡略:求成就排名前五的先生信息。

  例如:

  

  因為成就可以並列,所之前五名能夠有多個。例如:

    

  測試數據:  

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,'紀八',94 union all
select 9,'邱九',93 union all
select 10,'林十',92 

2、本身完成

  我的設法主意:既然能夠湧現並列,那末就用 DISTINCT 找到前五的成就。ok,代碼以下:

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

  看起來和下面的請求的成果照樣不太一樣,少了排序,固然我們可以在法式處置,這不是成績。

3、應用內置排名函數 DENSE_RANK

  其實sql server曾經內置了如許的函數可以贊助我們輕松完成,ok,直接上代碼:

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

 4、擴大,內置排名函數RANK

  與 DENSE_RANK相似還有一個RANK函數,不外RANK函數不會次序排名,而是依據序號排。有點繞,把下面的函數改成RANK()就曉得了,獲得的成果以下:

  

以上就是sql server排名函數DENSE_RANK的應用辦法,分享了本身的一些設法主意,願望對年夜家的進修有所啟示。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved