sql server 2008认识 DENSE_RANK

有一个需求是对分数进行排名,相同的分数算是同一排名名次,同时排名的名次中不会有间隔。

创建表

CREATE TABLE result
(
id INT PRIMARY KEY IDENTITY,
score VARCHAR(20)
)

插入数据如下:

第一次想的思路是

1.进行分组排序

2.把分组排序之后的表与原有的表进行左链接排序

代码如下:

WITH temp AS(
SELECT ROW_NUMBER()OVER(ORDER BY score DESC)rank,score FROM result GROUP BY score)
SELECT rank,result.score FROM temp LEFT  JOIN result on result.score=temp.score ORDER BY score DESC

得出的结果为

后发现更简便的方法,即用dense_rank,用这个函数即可达到排序的目的,代码如下:

select Score, dense_rank()OVER (order by score desc) as Rank from result

结果同上面一样,后面查阅还有一个rank函数,此函数也是进行排序的,但是查出来的结果就是排名的名次有间隔,代码如下:

SELECT score,RANK() OVER(ORDER BY score DESC) AS RANK FROM result

结果如下排名的名次不连贯:

原文地址:https://www.cnblogs.com/97310ZT/p/10974593.html