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

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

  • 相关阅读:
    linux内存和swap
    Linux awk sort
    redis aof和rdb区别
    STL中的map、unordered_map、hash_map
    mysql 冷热备份
    redis
    linux 几个命令
    linux erase
    group by
    现在很多技术知识点缺乏来龙去脉的介绍
  • 原文地址:https://www.cnblogs.com/97310ZT/p/10974593.html
Copyright © 2011-2022 走看看