SQL中row_number函数用法

row_number函数用法

  • 1、函数讲解
  • 2、LeetCode实战

1、函数讲解

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

简单的说,row_number()从1开始,为每条分组记录返回一个数字,举例:

ROW_NUMBER() OVER(ORDER BY xlh DESC)

这里的用法是先将xlh列进行降序排序,再将降序后的每条记录返回一个序号。
在这里插入图片描述

row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根据COL1分组,在分组内部根据COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

初始数据显示为:
在这里插入图片描述
我们的目标是根据部门进行分组,并显示每个部门的工资等级
SQL语句:

select * ,Row_number() OVER(partition by deptid order by salary DESC) rank
FORM employee

最终显示结果为:
在这里插入图片描述

2、LeetCode实战

题目是LeetCode上的题目:
在这里插入图片描述
编写一个sql查询,查找所有至少连续出现三次的数字。返回的结果表中的数据可以按任意顺序排列。
查询格式如下面的例子所示:
在这里插入图片描述
下面是具体是解题代码:

select distinct Num as ConsecutiveNums from
(select Num,count(1) as SerialCount from(select id,Num,row_number() over(order by id) - row_number() over(partition by Num order by Id) as SerialNumberSubGroupfrom Logs) as sub group by Num,SerialNumberSubGrouphaving count(1) >= 3) as res

上面的解题是参照题解里以为大佬的解题思路:
具体解题过程参照:
作者:neilsons
链接:https://leetcode-cn.com/problems/consecutive-numbers/solution/sql-server-jie-fa-by-neilsons/
原始数据:
在这里插入图片描述

1、对原始数据编号,从1开始使用 row_number() over(表达式) 函数,使用Id来排序既row_number()

SELECT Id,Num,
row_number() over(order by id) as SerialNum
FROM ContinueNumber

在这里插入图片描述

2、使用原始数据另一维度排序,这些num值一样的分组排序,然后对其编号同样使用row_number() over(表达式),参数:(num分组,id排序)row_number() over(partition by num order by id)

SELECT Id,Num,
ROW_NUMBER() over(partition by Num order by Id) as SerialGroup
FROM ContinueNumber

在这里插入图片描述
3、通过上述1和上述2 看一下有什么规律吗?两个列(SerialNum,SerialGroup)对应相减,只要连续,相减得到的值是一样的。不连续相减得到的值也不同。

SELECT Id,Num,row_number() over(order by id) -row_number() over(partition by Num order by Id) as SerialNumberSubGroupFROM ContinueNumber

在这里插入图片描述

4、通过上述3,通过列Num和列SerialNumberSubGroup分组,最后拿到Num,就是求得的数据,去重(distinct)指:有可能同一个数字在多处出现三次以上。

SELECT DISTINCT Num FROM (
SELECT Num,COUNT(1) as SerialCount FROM 
(SELECT Id,Num,
row_number() over(order by id) -
ROW_NUMBER() over(partition by Num order by Id) as SerialNumberSubGroup
FROM ContinueNumber) as Sub
GROUP BY Num,SerialNumberSubGroup HAVING COUNT(1) >= 3) as Result

这个解题的核心是要想明白一个结论:如果一个num连续出现时,那么它出现的【真实序列】-它出现的次数一定是个定值。因为:

1、假设一个num出现后,它的 真实序列 为 i ,同时假设它是第 k 次出现的; 差值为 i-k.
2、当它连续出现一次时,它的 真实序列 一定为 i+1 ; 它的出现次数显然也会+1,为 k+1 ; 差值为 i+1-(k+1)=i-k.
3、当它连续出现第 n 次时,它的 真实序列 一定为 i+n;它出现的次数为 k+n;差值为 i+n-(k+n)=i-k.
4、如果它不连续出现,假设m个其他num出现之后,它又出现了,则它的真实序列为 i+n+m,而出现的次数为 k+n+1;差值为 i-k+m-1 。

所以,上述解题大佬的做法其实就是:
第一步重排的serialNum表示:这个num出现的真实序列,也就是说在原始数据中,它是第几个出现的;
第二步重排的serialGroup表示:这个num是第几次出现的;
然后其他的步骤就比较容易想了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351649.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Hbase进行RowCount统计

对于Table内RowKey个数的统计,一直是HBase系统面临的一项重要工作,目前有三种执行该操作的方式。 测试环境: Apache版的 hadoop-2.6.0 (cdh版的hadoop-2.6.0-cdh5.5.2也可以) Apache版的 hbase-1.0.0 (一…

【完整版】2023二级建造师《建筑实务》真题答案解析(2天考3科)

2023二级建造师考试将在6月3日、4日举行,2023二建《市政实务》考试时间(2天考3科):6月4日 9:00-12:00, 考后甘建二将及时发布2023年二建市政实务真题及答案解析,敬请关注 2天考3科地区:四川、山…

DMBOK知识梳理for CDGA/CDGP——第三章数据治理

关 注gzh“大数据食铁兽” 回复“知识点”获取《DMBOK知识梳理for CDGA/CDGP》常考知识点(第三章数据治理) 第三章 数据治理 第三章在是CDGA|CDGP考试的重点考核章节之一,知识点比较密集,本章重点为语境关系图及数据治理概念…

LiangGaRy-学习笔记-Day19

1、回顾知识 1.1、文件系统说明 xfs与ext4文件系统 CentOS7以上:默认的就是XFS文件系统 xfs 使用的就是restore、dump等工具 CentOS6默认的就是ext4文件系统 extundelete工具就是用于ext4系统 1.2、回顾Linux文件系统 Linux文件系统是由三个部分组成 inode文…

一文学会MySQL四种安装方式

目录 🍁rpm方式安装 🍀下载软件包 🍀前置配置 🍀安装MySQL 🍁yum方式安装 🍀下载软件包 🍀安装MySQL 🍁二进制方式安装 🍀下载软件包 🍀安装MySQL &#x1f3…

2023最新网络安全面试题大全,看完这篇你的秋招offer就到手了!

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年…

【自定义CPU占用率】

题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况: 1. CPU的占用率固定在50%,为一条直线&…

控制cpu占有率

http://www.cnblogs.com/Ripper-Y/archive/2012/05/19/2508511.html CPU正弦曲线 1 #include <iostream>2 #include <cmath>3 #include <ctime>4 #include <windows.h>5 6 using namespace std;7 8 //得到循环0xFFFFFFFF次用的秒数9 unsigned int te…

CPU正弦曲线

CPU正弦曲线 1 #include <iostream>2 #include <cmath>3 #include <ctime>4 #include <windows.h>5 6 using namespace std;7 8 //得到循环0xFFFFFFFF次用的秒数9 unsigned int test() 10 { 11 unsigned int c 0xFFFFFFFF; 12 13 time_t t1…

(1.5.1.1)编程之美:让CPU占用率曲线听你指挥

题目&#xff1a;写一个程序&#xff0c;让用户来决定Windows任务管理器&#xff08;Task Manager&#xff09;的CPU占用率。程序越精简越好&#xff0c;计算机语言不限。例如&#xff0c;可以实现下面三种情况&#xff1a; 1. CPU的占用率固定在50%&#xff0c;为一条直线&…

让CPU占用率曲线听你指挥

由于网上已经有很多有关此问题的博客&#xff0c;本文参考了http://blog.csdn.net/wesweeky/article/details/6402564 题目&#xff1a;写一个程序&#xff0c;让用户来决定Windows任务管理器&#xff08;Task Manager&#xff09;的CPU占用率。程序越精简越好&#xff0c;计…

现代计算机理论基础是什么_为什么旧游戏在现代计算机上运行得太快?

现代计算机理论基础是什么 If you’ve ever tried to get a vintage computer game up and running on a modern system, you’ve likely been shocked at how fast the game ran. Why do old games run out of control on modern hardware? 如果您曾经尝试过在现代系统上启动…

《编程之美》读书笔记23: 1.1 让CPU占用率曲线听你指挥

题目&#xff1a;写一个程序&#xff0c;让用户来决定Windows任务管理器&#xff08;Task Manager&#xff09;的CPU占用率。程序越精简越好&#xff0c;计算机语言不限。例如&#xff0c;可以实现下面三种情况&#xff1a; 1. CPU的占用率固定在50%&#xff0c;为一条直线&…

编程之美:让CPU占用率曲线听你指挥

题目&#xff1a;写一个程序&#xff0c;让用户来决定Windows任务管理器&#xff08;Task Manager&#xff09;的CPU占用率。程序越精简越好&#xff0c;计算机语言不限。例如&#xff0c;可以实现下面三种情况&#xff1a; 1. CPU的占用率固定在50%&#xff0c;为一条直线…

Python+Pytest+Allure+Git+Jenkins数据驱动接口自动化测试框架

一、接口基础   接口测试是对系统和组件之间的接口进行测试&#xff0c;主要是效验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP&#xff0c;RPC&#xff0c;Webservice&#xff0c;Dubbo&#xff0c;RESTful等类型。 …

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用 &#x1f53b;一、数据库创建、删除、选择1.1 &#x1f343; create database 创建数据库1.2 &#x1f343; 使用 mysqladmin 创建数据库1.3 &#x1f343; drop 命令删除数据库--一般不建议在数据库执行delete、drop等命令…

火狐浏览器下载网页视频

1、打开火狐浏览器菜单栏&#xff0c;点击“附件组件”&#xff1a; 2、在搜素框内输入“VideoGrab” 回车。 3、点击搜索结果&#xff1a; 4、点击添加&#xff0c;我这里已经添加&#xff0c;所以显示的是可“移除”&#xff1b;

Firefox(火狐浏览器)

下面的教程因为有的过程复杂&#xff0c;所以点到即止&#xff0c;不进行多余赘述。请高阶鸟自行摸索。 毕竟&#xff0c;师傅领进门&#xff0c;修行在个人。 1.下载安装 官网&#xff1a;http://www.firefox.com.cn/ 既然是高阶鸟&#xff0c;下载安装什么的不是有手就行吗…

火狐linux 32位,火狐浏览器32.0版本-Firefox(火狐浏览器)32.0版下载 v32.0官方版--pc6下载站...

Firefox32.0版带有一个新的HTTP缓存后端&#xff0c;其他改进包括请求排序的优化&#xff0c;以提供更快的加载时间以及对崩溃和挂起应变能力提升&#xff0c;而且可以查看密码管理器中存储的登录的历史使用信息。。 Firefox 32.0版带有一个新的HTTP缓存后端&#xff0c;其他改…

waterfox(水狐)——火狐的非官方64位版浏览器(汉化)

64位系统下的64位应用毫无疑问会带来更好的性能&#xff0c;Mozilla最近显然是采用了互联网快速迭代的开发模式&#xff0c;Firefox在版本更新方面要向Google的Chrome看齐了。但64位的FireFox却始终步履蹒跚&#xff0c;而且它非常早期和不稳定&#xff0c;对于64位系统的朋友们…