一、SQL Server Row_number函数简介

ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。

语法实例:

select *,row_number() over(partition by column1 order by column2) as n
from tablename

在上面语法中:

  • PARTITION BY子句将结果集划分为分区。 ROW_NUMBER()函数分别应用于每个分区,并重新初始化每个分区的行号。
  • PARTITION BY子句是可选的。如果未指定,ROW_NUMBER()函数会将整个结果集视为单个分区。
  • ORDER BY子句定义结果集的每个分区中的行的逻辑顺序。 ORDER BY子句是必需的,因为ROW_NUMBER()函数对顺序敏感

二、Row_number函数的具体用法

1.使用row_number()函数对结果集进行编号

示例:
对test_user表的查询结果标记行号,并新增 “编号”列返回

-- 使用 ROW_NUMBER()函数对结果进行编号
select ROW_NUMBER() over(order by id) as 编号,*
from test_user;

运行结果:

可以看到,查询结果新增了一列,专门用来标记行号。

有了编号,我们就可以方便地进行分页查询了,如何操作,可参考另外篇文章:sqlServer如何实现分页查询

2.对结果集按照指定列进行分组,并在组内按照指定列排序

示例:
把test_user表的name按照小组进行分组显示,分组后在组内进行从低到高id排序

-- 使用partition by对结果集进行分组
select *,row_number() over(partition by name order by id) as n
from  test_user;

运行结果:

3.对结果集按照指定列去重

示例:
对 test_user表按name进行分组显示,结果集中只显示每组中一条 id最小的数据

select a.* from (select *,row_number() over(partition by name order by id) as row_id from test_user) as a
-- 只查询组内编号为1的数据
where a.row_id<2;

运行结果:

查询结果先是经过name分组,然后组内进行id升序排序,组内编号为1的第1条数据,自然就是id最小的数据。

注意:
当我们按成绩分数查询名次等需求时,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果。这个时候就要用到另外一个函数,rank()和dense_rank()。

rank()和dense_rank()区别:

1、RANK()
在计算排序时,若存在相同位次,会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,4······
2、DENSE_RANK()
这就是题目中所用到的函数,在计算排序时,若存在相同位次,不会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,2······

SQL Server中row_number函数用法介绍相关推荐

  1. Sql Server中Row_Number()函数

    1.使用row_number()函数进行编号:如 select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Cu ...

  2. Sql server中时间函数用法详解

    SQL中的时间函数非常有用,特别是在我们进行初始赋值.复杂查询的时候,就显得特别方便. 1.获得系统当前时间 select getdate()  2.DateName ( datepart , dat ...

  3. SQL Server中COALESCE函数的用法

    在SQL Server中COALESCE函数,会返回其参数中第一个不为NULL的参数,效果如下: SELECT COALESCE(NULL,NULL,N'A',NULL,NULL) 结果: SELEC ...

  4. oracle判断是否为空为空赋值,sql数据库中ISNULL函数用法 sql语句判断值是否为空...

    在使用sql数据库的过程,由于服务器设置不当导致sql server的某个字段为空,导致部分内容显示失败,就需要将为空的字符替换为制定的字符. 例子,sql语句: use 数据库 update new ...

  5. SQL Server中自定义函数和游标应用的经典案例

    2019独角兽企业重金招聘Python工程师标准>>> SQL Server中自定义函数和游标应用的经典案例 转载于:https://my.oschina.net/zhddzr/bl ...

  6. Sql Server 2005 ROW_NUMBER 函数实现分页

    过去用SQL Server 2000分页的,大多都用到了临时表.SQL Server 2005 ROW_NUMBER 函数支持分页,性能据说也非常不错. Paging Records Using SQ ...

  7. SQL SERVER 中 GO 的用法2

    具体不废话了,请看下文详解. 1 2 3 4 5 6 7 8 9 10 use db_CSharp go  select *,  备注=case  when Grade>=90 then '成绩 ...

  8. oracle的date_add,SQL Server 中add函数到 oracle date add的操作

    SQL Server 中add函数到 oracle date add的操作 oracle date add minutes How does one add a day/hour/minute/sec ...

  9. sql server中datename函数的使用

     DATENAME(param,date); 参数说明 1.param是指定要返回日期部分的参数 日期部分 缩写 year yy, yyyy quarter qq, q month mm, m d ...

最新文章

  1. 机器学习四剑客4——PIL
  2. linux useradd
  3. MariaDB Galera Cluster with HA Proxy and Keepalived on Cents 6
  4. python需要掌握的词汇量_北大保安英语词汇量1.5万,会用Python编程,孟母三迁真有道理...
  5. python第九天(9-33)
  6. unknown chromium error 400
  7. Zookeeper和CAP的关系
  8. BookCorpus数据集爬虫
  9. 获取客户端上次请求的URL
  10. 李宏毅自然语言处理——依存句法分析
  11. 电子工业出版社博文视点Open Party 新年聚会 圆满成功召开
  12. 映美精LoadDeviceStateFromFile问题
  13. 详解会员积分营销系统的作用
  14. Mac设置右键用VSCode打开文件和文件夹
  15. 目前世界上15款优秀杀毒软件
  16. STM32F4+FreeRTOS+FreeRTosTcpIp移植教程
  17. 如何注册一个微信公众号
  18. 「高效程序员的修炼」代码版本管理工具 Git 用起来 01 Git 基础
  19. 字节社交转向:放弃飞聊,押注元宇宙社交
  20. 众利币开发与模式设计

热门文章

  1. csgo没显示重新连接服务器,csgo正在重新连接游戏服务器
  2. 数人云|还在为负载均衡操碎心?这里有10大开源负载均衡工具
  3. js创建数组的四种方法、常用方法、属性
  4. 【SDU青山】项目实训记录(1)
  5. 使用HTML+CSS制作网易云轮播
  6. 二叉树前序遍历,后序遍历
  7. c语言判断一个数被7整除,判断某个整数a是否被7整除 c语言
  8. Flutter--解决web端网络请求失败问题
  9. 未来或将是属于人造皮肤的:电子时代的颠覆者
  10. 猎聘招聘网数据可视化