zoukankan      html  css  js  c++  java
  • SQL SERVER中RANK、DENSE_RANK以及ROW_NUMBER区别

    场景

    数据库查询中,很多时候都会遇到对数据进行分组,然后组内排序加序号的需求。

    RANK()、DENSE_RANK()以及ROW_NUMBER()这三个函数都是对分过组的数据排序加序号,这三个函数又各自有区别

    语法

    1. ROW_NUMBER() OVER([PARTITION BY Colums1] ORDER BY colums2)
    2. DENSE_RANK() OVER([PARTITION BY Colums1] ORDER BY colums2)
    3. RANK() OVER([PARTITION BY colums1] ORDER BY colums2)

    [PARTITION BY colums1]是可选的,即不分组,或者说所有满足条件的数据一组。

    区别

    三个函数都是按照colums1分组内从1开始排序
    其中,ROW_NUMBER() 是没有重复值的排序(即使两条记录相同,序号也不重复的),不会有同名次。
        DENSE_RANK() 是连续的排序,两个第二名仍然跟着第三名。

        RANK()       是跳跃排序,两个第二名下来就是第四名。

    举例

    SELECT  c.UserName
            ,s.SoftName
            ,s.UseTime
            ,ROW_NUMBER() OVER(PARTITION BY c.UserName ORDER BY s.UseTime DESC) [Num]
        FROM 表

  • 相关阅读:
    广播通信
    IP多播
    套接字选项
    IO处理线程
    单源最短路径
    活动安排问题贪心算法
    贪心算法
    IO控制命令
    [转]qsort详解
    2012下半年学习目录
  • 原文地址:https://www.cnblogs.com/johnblogs/p/13617634.html
Copyright © 2011-2022 走看看