zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    期末总结
    虚拟存储器学习记录
    实验报告
    并发编程学习记录
    进程&信号&管道实践学习记录
    异常控制流学习记录
    系统级IO实践学习记录
    系统级I/O学习记录
    Arduino小车学习与研究
    期中总结
  • 原文地址:https://www.cnblogs.com/97310ZT/p/10974593.html
Copyright © 2011-2022 走看看