SQL Server中row_number函数用法入门介绍

作者:格子衫111 时间:2024-01-26 22:45:04 

一、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;

运行结果:

SQL Server中row_number函数用法入门介绍

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

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

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

示例:

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

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

运行结果:

SQL Server中row_number函数用法入门介绍

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;

运行结果:

SQL Server中row_number函数用法入门介绍

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

注意:

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

rank()和dense_rank()区别:

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

 总结

来源:https://blog.csdn.net/u012660464/article/details/127986482

标签:sqlserver,row,number,函数
0
投稿

猜你喜欢

  • JavaScript每天必学之基础知识

    2024-04-18 10:02:25
  • Python3实现飞机大战游戏

    2022-08-25 05:29:03
  • Django中间件拦截未登录url实例详解

    2022-05-15 05:30:21
  • python字典序问题实例

    2023-07-31 05:46:58
  • 网站细节论(1)--阅读的细节

    2007-12-21 12:16:00
  • 五大提高ASP运行效率的技巧

    2007-09-20 13:15:00
  • ThinkPHP5.1表单令牌Token失效问题的解决

    2023-11-15 08:58:15
  • Django小白教程之Django用户注册与登录

    2022-01-14 10:30:06
  • Django通过json格式收集主机信息

    2022-03-23 19:58:49
  • 把JS与CSS写在同一个文件里

    2007-12-16 15:29:00
  • python浪漫表白源码

    2023-11-22 05:16:39
  • python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法

    2023-07-29 05:25:42
  • python中实现定制类的特殊方法总结

    2023-06-19 10:32:31
  • go语言LeetCode题解720词典中最长的单词

    2023-08-05 19:46:04
  • ORACLE常见错误代码的分析与解决(一)

    2010-08-02 13:20:00
  • Mysql Error Code : 1436 Thread stack overrun

    2024-01-23 14:04:04
  • 详解python中index()、find()方法

    2021-02-25 02:38:59
  • 关于自动化测试框架pytest的Fixture固件

    2023-10-16 00:02:50
  • Python中Permission denied的解决方案

    2023-11-09 18:42:24
  • PHP中使用FFMPEG获取视频缩略图和视频总时长实例

    2023-11-16 18:57:46
  • asp之家 网络编程 m.aspxhome.com