Sql Server ROW_NUMBER、RANK等排名函数小结

2021/11/15 19:10:26

本文主要是介绍Sql Server ROW_NUMBER、RANK等排名函数小结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Sql server 内有四个排名函数,分别是ROW_NUMBER()RANK()DENSE_RANK() 以及 NTILE()

1. ROW_NUMBER()函数

  ROW_NUMBER() 函数对查询到的结果进行简单的排序处理,可以对查询结果编排一个序号,并且不会重复。
配合OVER()语句使用,按照指定的字段进行排序。可以用于分页查询,取指定序号范围内的数据。

举个栗子:

  -- 基本用法:row_num 就是 ROW_NUMBER() 根据 ID 字段升序排序的序号
  select ROW_NUMBER() OVER(order by ID asc) AS row_num, * from USER
  -- 简单分页:取查询结果的 1 到 10 条
  select * from (
      select ROW_NUMBER() OVER(order by ID asc) AS row_num, * from USER
  ) AS A 
  where A.row_num between 1 and 100 
  order by A.row_num

2. RANK()函数

  RANK()函数类似于上学时按照考试成绩排名,遇到两个人成绩相同就并列到一起。
例如,A、B考了一百分,则都并列第一名,下一个人是第三名而不是第二名,A、B就拥有相同的序号。
(如排名:1、1、3、4、5)

举个栗子:

  -- 基本用法:row_num 就是 RANK() 根据 SCOORE 分数字段降序排序的排名
  select RANK() OVER(order by SCOORE DESC) AS row_num, * from GRADE

3. DENSE_RANK()函数

  DENSE_RANK() 函数与 RANK() 函数较为相似,区别在于 DENSE_RANK() 函数的排名是连续的。
例如,A、B考了一百分,则都并列第一名,但下一个人是接着上个序号继续编号,即排名第二名。
(如排名:1、1、2、3、4)

举个栗子:

  -- 基本用法:row_num 就是 DENSE_RANK() 根据 SCOORE 分数字段降序排序的排名
  select DENSE_RANK() OVER(order by SCOORE DESC) AS row_num, * from GRADE

4. NTILE()函数

  NTILE() 函数则是按照指定组数,对数据进行等分分组排序。
(注:不能等分时,排序靠前的组的数据行数不能小于排序靠后的组的数据行数)
如:结果 10 条数据,指定组数为 2,则编号 1 组包含前 5 条数据,编号 2 组包含后 5 条数据。
指定组数为 4,则编号 1 组包含前 3 条数据,编号 2 组包含后面 3 条数据,编号 3 组包含后续两条数据,编号 4 组包含最后两条数据。
  -- 基本用法
  select NTILE(4) OVER(order by ID desc) as ntile, * from USER


这篇关于Sql Server ROW_NUMBER、RANK等排名函数小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程