SQL Server中row_number函数用法入门介绍
目录
一、SQL Server Row_number函数简介
ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。
语法实例:
select *,row_number() over(partition by column1 order by column2) as n
from tablename
在上面语法中:
二、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函数用法入门介绍的文章就介绍到这了,更多相关SQLServer row_number函数用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播