使用Mysql实现Postgresql中窗口函数row_number的功能

1. 描述

需要根据用户id,查询每个人得分第二高的科目信息

2. 表结构及数据

2.1 表结构

CREATE TABLE `t_score` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `score` double NOT NULL,
  `subject` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;

2.2 测试数据

INSERT INTO hz_base.t_score
(id, user_id, score, subject)
VALUES(5, 1, 110.0, '数学');
INSERT INTO hz_base.t_score
(id, user_id, score, subject)
VALUES(6, 1, 116.5, '语文');
INSERT INTO hz_base.t_score
(id, user_id, score, subject)
VALUES(7, 1, 72.0, '英语');
INSERT INTO hz_base.t_score
(id, user_id, score, subject)
VALUES(8, 2, 116.5, '语文');
INSERT INTO hz_base.t_score
(id, user_id, score, subject)
VALUES(9, 2, 92.0, '英语');
INSERT INTO hz_base.t_score
(id, user_id, score, subject)
VALUES(10, 2, 88.0, '数学');

3. 使用

3.1 类似问题postgresql使用窗口函数ROW_NUMBER实现示例

select * from (
select id, user_id, score, subject,ROW_NUMBER() over (PARTITION by user_id order by score desc) rn from t_score 
) a
where rn = 2

3.2 mysql实现

由于mysql中8.0以下版本缺少对应的窗口函数,如果需要实现该逻辑,可以使用以下sql实现

-- 使用子查询,根据用户id分析,取第二个
select id, user_id, score, subject from t_score s1
where s1.id = (
	select id from t_score
	where user_id = s1.user_id 
	order by score desc
	limit 1 offset 1
);

4. 运行结果

4.1 全部数据

4.2 筛选出的数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识库建设这些工具来帮忙,企业工作效率翻倍

在当今深度信息化的年代,知识库成了企业不可或缺的一部分,它的建设与管理显得格外重要。然而,想要建设又好又高效的知识库并非易事。好消息是,有很多优秀的工具可以让这个过程变得更加轻松,今天我们就重点来探讨其中的…

Vulnhub靶场DC-2

本机IP:192.168.223.128 目标IP:192.168.223.131 目标搜索:nmap -sP 192.168.223.1/24 端口搜索:nmap -sV -A -p- 192.168.223.131 开放了80 7744端口 访问一下web 发现进不去 目标ip被重定向到www.dc-2.com 修改一下本地DNS l…

【极数系列】Flink集成DataSource读取Socket请求数据(09)

文章目录 01 引言02 简介概述03 基于socket套接字读取数据3.1 从套接字读取。元素可以由分隔符分隔。3.2 windows安装netcat工具(1)下载netcat工具(2)安装部署(3)启动socket端口监听 04 源码实战demo4.1 po…

[网络安全]IIS---FTP服务器 、serverU详解

一 . FTP服务器(File Transfor Protocol) : 协议:文件传输协议 端口号:TCP: 20(数据) / 21(控制) 二 . FTP工作方式: 1.主动模式 : (FTP服务器21端口与FTP客户端产生的随机端口先建立连接 建立连接后,再使用FTP服务器21端口与FTP客户端创建的一个新的随机端口进行发送…

【lesson29】MySQL事务不同隔离级别之间的区别演示

文章目录 读未提交读提交可重复读串行化总结 读未提交 我们看到这时的隔离级别是读提交,那么我们就要把隔离级别改为,读未提交。 我们可以看到两个终端的mysql隔离级别已经都被改成了读未提交。 开始演示读未提交: 开启2个事务 事务2读…

【C++】STL之空间配置器(了解)

一、什么是空间配置器 空间配置器 ,顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的,在默默地工作。虽然在常规使用 STL 时,可能用不到它,但站在学习研究的角度,学习它的实现原理对…

[BUUCTF]-PWN:cmcc_pwnme2解析

保护 ida 完整exp: from pwn import* context(log_leveldebug) #premote(node5.buuoj.cn,26964) pprocess(./pwnme2) addhome0x8048644 addflag0x8048682 getfile0x80485CB main0x80486F8 pop_ebp0x8048680 ret0x80483f2 pop_ebx0x8048409 pop_edi_ebp0x804867f st…

QT自制软键盘 最完美、最简单、支持中文输入(二)

目录 一、前言 二、本自制虚拟键盘特点 三、中文输入原理 四、组合键输入 五、键盘事件模拟 六、界面 七、代码 7.1 frmKeyBoard 头文件代码 7.2 frmKeyBoard 源文件代码 八、使用示例 九、效果 十、结语 一、前言 由于系统自带虚拟键盘不一定好用,也不一…

大学生以C语言为开始怎样学好编程呢?

大学生以C语言为开始怎样学好编程呢? 在开始前我分享下我的经历,刚入行时遇到一个好公司和师父,给了我机会,两年时间从3k薪资涨到18k的, 我师父给了一些C语言学习方法和资料,让我不断提升自己,…

【Node.js基础】Node.js的介绍与安装

文章目录 前言一、什么是Node.js?二、安装Node.js2.1 Windows系统2.2 macOS系统2.3 Linux系统 三、运行js代码总结 前言 随着互联网技术的不断发展,构建高性能、实时应用的需求日益增长。Node.js作为一种服务器端运行时环境,以其事件驱动、非…

2024新鲜出炉 Java集合常见面试题总结(下)

2024新鲜出炉 Java集合常见面试题总结(下) 文章目录 2024新鲜出炉 Java集合常见面试题总结(下)Map(重要)HashMap 和 Hashtable 的区别HashMap 和 HashSet 区别HashMap 和 TreeMap 区别HashSet 如何检查重复?HashMap 的底层实现JDK1.8 之前JDK1.8 之后 H…

java基于springboot的美妆化妆品商城购物网站ssm+vue

美妆购物网站分为管理员,商家,用户三种权限。 用户可以注册,可以登录,用户进入到首页可以看到热门化妆品和新品化妆品,可以选购化妆品(可以通过搜索查询)加入购物车,查看化妆品详细情…

(自用)learnOpenGL学习总结-高级OpenGL-抗锯齿

MSAA 光栅器会将一个图元的所有顶点作为输入,并将它转换为一系列的片段。顶点坐标理论上可以取任意值,但片段不行,因为它们受限于你窗口的分辨率。顶点坐标与片段之间几乎永远也不会有一对一的映射,所以光栅器必须以某种方式来决定…

github开源代码流程-初始化配置 quick start

开始前配置: 需要有一个github账号 需要安装git 一.配置github 登陆github 需要username(这个后面会用到),password 1.配置pat密钥token 由于github已经移除了靠password进行验证的方式,所以必须进行个人令牌的设…

一键给家长私发成绩

各位老师,你们是否也有过这样的经历:每到考试后,为了将学生的成绩一一发给家长,费尽心思地整理、核对,甚至有时候还要加班。如今,有了易查分,这一切似乎变得轻松起来。但这个功能真的是老师们的…

2023 IoTDB Summit:Dr. Feinauer《Apache IoTDB在德国工业和关键基础设施中的应用》

12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Patch2QL:开源供应链漏洞挖掘和检测的新方向

背景 开源生态的上下游中,漏洞可能存在多种成因有渊源的其它缺陷,统称为“同源漏洞”,典型如: 上游代码复用缺陷。开源贡献者在实现功能相似的模块时,常复用已有模块代码或逻辑;当其中某个模块发现漏洞后…

成功解决Error:AttributeError: module ‘numpy‘ has no attribute ‘long‘.

成功解决Error:AttributeError: module ‘numpy‘ has no attribute ‘long‘. 🌵文章目录🌵 🌳引言🌳🌳报错分析🌳🌳解决方案1:降低NumPy版本🌳&#x1f333…

vue实现瀑布流

每个色块宽度一致&#xff0c;高度自适应 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"><meta name"renderer" content"we…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(1)

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…