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

 更新时间:2023年03月02日 12:02:22   作者:格子衫111  
SQL ROW_NUMBER函数是临时值序列的非持久生成,并且在执行查询时会动态计算该函数,下面这篇文章主要给大家介绍了关于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

在上面语法中:

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

相关文章

  • sql脚本查询数据库表,数据,结构,约束等操作的方法

    sql脚本查询数据库表,数据,结构,约束等操作的方法

    本文介绍了“sql脚本查询数据库表,数据,结构,约束等操作的方法”,需要的朋友可以参考一下
    2013-03-03
  • Sql Server删除数据库时提示数据库正在被使用的解决办法

    Sql Server删除数据库时提示数据库正在被使用的解决办法

    当您尝试删除SQL Server中的某个对象(如数据库、表等)时,如果有程序或进程正在使用该对象,您可能会收到一个错误信息,提示该对象正被使用,所以本文给大家介绍了Sql Server删除数据库时提示数据库正在被使用的解决办法,需要的朋友可以参考下
    2024-05-05
  • 探讨SQL compute by的使用分析

    探讨SQL compute by的使用分析

    本篇文章是对SQL compute by的使用进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MSSQL 首字母替换成大写字母

    MSSQL 首字母替换成大写字母

    MSSQL將首字母替換成大寫的实现语句,需要的朋友可以参考下。
    2009-09-09
  • SQL Server数据库之表的高级查询

    SQL Server数据库之表的高级查询

    这篇文章主要给大家介绍了关于SQL Server数据库之表的高级查询的相关资料,高级查询在数据库中用得是最频繁的,也是应用最广泛的,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • SqlDateTime溢出该怎么解决

    SqlDateTime溢出该怎么解决

    这篇文章主要介绍了SqlDateTime溢出该怎么解决的相关资料,需要的朋友可以参考下
    2015-11-11
  • 简单介绍SQL Server里的闩锁

    简单介绍SQL Server里的闩锁

    这篇文章我们探讨了SQL Server里的闩锁,以及如何使用DMV sys.dm_os_wait_stats 和sys.dm_os_latch_stats进行闩锁等待的故障排除,需要的朋友可以参考下
    2015-07-07
  • SQL Server主键与外键设置以及相关理解

    SQL Server主键与外键设置以及相关理解

    在数据库的学习中对于一个表的主键和外键的认识是非常重要的,下面这篇文章主要给大家介绍了关于SQL Server主键与外键设置以及相关理解的相关资料,需要的朋友可以参考下
    2022-10-10
  • sqlserver 字段值拼接的实现示例

    sqlserver 字段值拼接的实现示例

    拼接字段可以通过多种方法实现,本文主要介绍了sqlserver字段值拼接的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Sql Server中的视图介绍

    Sql Server中的视图介绍

    这篇文章主要介绍了Sql Server中的视图介绍,本文讲解了视图的定义、视图的作用、创建视图实例、删除修改视图等内容,需要的朋友可以参考下
    2015-01-01

最新评论