小知识:SQL Server中row_number函数用法入门介绍

一、SQL Server Row_number函数简介

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

语法实例:

?
1
2
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表的查询结果标记行号,并新增 “编号”列返回

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

运行结果:

%小知识:SQL Server中row_number函数用法入门介绍-猿站网-插图

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

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

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

示例:

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

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

运行结果:

%小知识:SQL Server中row_number函数用法入门介绍-1猿站网-插图

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

示例:

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

?
1
2
3
4
5
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函数用法入门介绍-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函数用法入门介绍的文章就介绍到这了,更多相关SQLServer row_number函数用法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/u012660464/article/details/127986482

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:虚拟机文件丢失导致Hyper-V服务瘫痪的数据恢复

2023-3-5 15:09:40

建站知识

小知识:离线硬盘强制上线导致RAID5崩溃的数据恢复

2023-3-5 15:13:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索