ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-11-15 16:34:14  阅读:158  来源: 互联网

标签:函数 NUMBER RANK Server num ROW row


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

标签:函数,NUMBER,RANK,Server,num,ROW,row
来源: https://www.cnblogs.com/yetingxue/p/15556936.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有