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

news2024/11/23 21:58:55

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 筛选出的数据

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

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

相关文章

Java技术栈 —— Spring MVC 与 Spring Boot

参考文章或视频链接[1] Spring vs. Spring Boot vs. Spring MVC[2] Key Differences Between Spring vs Spring Boot vs Spring MVC

VMware安装RHEL-磁盘划分和分区

本文探讨了在VMware虚拟机上安装RHEL时遇到的磁盘划分和分区问题。文章详细介绍了磁盘划分过程中可能出现的问题,特别是在选择磁盘类型时可能导致找不到磁盘的情况。通过清晰的步骤和解决方法,读者可以更好地理解如何正确进行磁盘划分以及如何解决磁盘无…

c#鼠标绘制

有用的没用的,用的上的用不上的,能写的不能写的,反正想起来就写了,比如这篇,好像一般也没什么用,emmm,或许,做录制软件的时候可以用一下。 顾名思义,本篇主要就是来实现将…

九章云极DataCanvas公司荣登“2023Venture50投资界数字科技”榜

近日,由中国领先的创业与投资综合服务机构清科创业、投资界发起的2023Venture50评选结果最终揭晓。九章云极DataCanvas公司凭借雄厚的技术实力、稳定的业务发展和成熟的商业模式,入选“2023Venture50投资界数字科技TOP50”。 Venture50评选(简…

【经典项目】Java入门,实现斗地主小游戏

一、需求分析 实现斗地主游戏可以涉及以下几个关键步骤和思路: 游戏规则定义:首先,你需要明确斗地主游戏的规则,包括牌的花色和大小、玩家数量、发牌顺序、出牌规则、胜利条件等。 牌的表示和初始化:定义一套扑克牌的…

【Android Studio 启动出错】

Android Studio版本:2022.3.1 出错前操作: 昨晚开着三四个项目,然后太晚了直接关机睡觉,第二天起来开机,启动Android Studio,就出现了这个问题: Internal error. Please refer to https://co…

亚信安慧AntDB构建未来数据库典范

亚信安慧AntDB是一款数据库管理系统,它采用全球影响力大、社区繁荣、开放度高、生态增长迅速的PG内核。这款系统具有卓越的性能和稳定性,在全球范围内备受用户青睐。 与此同时,AntDB的社区也是充满活力的,用户可以在社区中交流经…

【C++】类和对象(二)——构造/析构/拷贝构造函数

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读1. 默认成员函数2. 构造函数2.1 引入2.2 特性2.3 默认构造函数 3. 析构函数3.1 概念3.2 特性3.3 默认析构函数 4. 拷贝构造函…

ARM汇编 4.GNU伪指令、内联汇编

汇编伪指令格式 标号symbol(label) 注释符号: 整行注释:# 语句分离:; 立即数前缀:# 或 $ 分段:.section伪操作,用于自定义新的段 .text:代码段.data&am…

【服务端性能测试】性能测试策略如何做

一、需求收集 先需要确认本次测试目的是什么,然后再看我们需要用什么参数来判断这个目的是否能够达成。 1.1 业务性能指标参考: TPS、QPS、RT、请求成功率(一般请求成功率>99.99%) 1.2 硬件性能指标参考: 即服…

C++ 滑动窗口

目录 1、209. 长度最小的子数组 2、3. 无重复字符的最长子串 3、1004. 最大连续1的个数 III 4、1658. 将 x 减到 0 的最小操作数 5、904. 水果成篮 6、438. 找到字符串中所有字母异位词 7、30. 串联所有单词的子串 8、76. 最小覆盖子串 1、209. 长度最小的子数组 思路&…

超越传统—Clean架构打造现代Android架构指南

超越传统—Clean架构打造现代Android架构指南 1. 引言 在过去几年里,Android应用开发经历了巨大的变革和发展。随着移动设备的普及和用户对应用的期望不断提高,开发人员面临着更多的挑战和需求。传统的Android架构在应对这些挑战和需求时显得有些力不从…

计算机网络-物理层传输介质(导向传输介质-双绞线 同轴电缆 光纤和非导向性传输介质-无线波 微波 红外线 激光)

文章目录 传输介质及分类导向传输介质-双绞线导向传输介质-同轴电缆导向传输介质-光纤非导向性传输介质小结 传输介质及分类 物理层规定电气特性:规定电气信号对应的数据 导向传输介质-双绞线 双绞线的主要作用是传输数据和语音信息。它通过将两根导线以特定的方…

【Effective Objective - C】—— 协议与分类

【Effective Objective - C】—— 协议与分类 23.通过委托与数据源协议进行对象间通信协议委托模式数据源模式 要点 24.将类的实现代码分散到便于管理的数个分类之中要点 25.总是为第三方类的分类名称加前缀要点 26.勿在分类中声明属性要点: 27.使用 “class-contin…

cleanmymacX有必要买吗

CleanMyMac X是一款被广泛推荐的Mac电脑清理软件。以下是关于是否购买CleanMyMac X的几个关键点: 软件功能:CleanMyMac X具备多项功能,包括但不限于系统垃圾清理、缓存清理、恶意软件移除、隐私保护等。这些功能有助于保持Mac电脑的清洁和性能…

数据可视化市场概览:五款主流工具的优缺点解析

在数据可视化的世界中,选择一款合适的工具对于提升工作效率和洞察力至关重要。本文将为您介绍五款主流数据可视化工具,包括山海鲸可视化、Echarts、D3.js、Tableau和Power BI,并进行详细比较,帮助您做出明智的选择。 山海鲸可视化…

【数据结构】(二)线性表List

目录 1、基本概念 2、栈(Stack) 3、队列(Queue) 4、串(String) 1、基本概念 (1)线性表是零或多个数据元素的有限序列。 (2)数组长度指存储空间长度&…

一键给家长私发成绩

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

【教学类-44-04】20240130 print dashed(虚线字体)制作的数字描字帖

作品展示:背景需求: 制作绿色数字的数字描字帖 选用字体:print dashed(虚线字体) 【教学类-44-03】20240111阿拉伯数字字帖的字体(三)——德彪钢笔行书(实线字体)和pri…

Java玩转《啊哈算法》排序之快速排序

心无挂碍,无挂碍故,无有恐怖,远离颠倒梦想,究竟涅槃。 地图 引子代码地址快速排序核心代码优劣完整代码演示 课后习题 引子 搭嘎好!本人最近看的《啊哈算法》这本书写的确实不错,生动形象,在保…