码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
    
    • 1
    • 2

    在上面语法中:

    • 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; 
    
    • 1
    • 2
    • 3

    运行结果:
    在这里插入图片描述
    可以看到,查询结果新增了一列,专门用来标记行号。

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

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

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

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

    运行结果:
    在这里插入图片描述

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果:
    在这里插入图片描述
    查询结果先是经过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······

  • 相关阅读:
    c++中用opengl的gl函数在三维空间中绘制圆形和画球体
    易点易动设备管理系统:提升设备巡检和维修效率,延长设备使用寿命的利器
    Flutter状态管理-FlyingRedux
    世界环境日 | 周大福用心服务推动减碳环保
    Android组件通信——Service(二十七)
    福建省发改委福州市营商办莅临育润大健康事业部指导视察工作
    中芯国际第二季度“喜忧参半”,芯片发展放缓,疫情重压出路在哪
    Qt按钮大全续集(QCommandLinkButton和QDialogButtonBox )
    Linux服务使用宝塔面板搭建网站,并发布公网访问 - 内网穿透
    react学习之---jsx转成虚拟dom的过程
  • 原文地址:https://blog.csdn.net/u012660464/article/details/127986482
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号