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

相关推荐

  1. MySQL窗口函数

    2024-01-31 19:28:04       19 阅读
  2. Hive窗口函数使用示例

    2024-01-31 19:28:04       24 阅读
  3. MySQLMySQL版本8+ 窗口函数 PERCENT_RANK 使用

    2024-01-31 19:28:04       35 阅读
  4. PostgreSQL 窗口函数汇总

    2024-01-31 19:28:04       16 阅读
  5. 如何在mysql生成类似oraclerownum行号?

    2024-01-31 19:28:04       15 阅读
  6. Mysql5.7版本实现窗口函数

    2024-01-31 19:28:04       32 阅读
  7. SQLtop、limit以及rownum

    2024-01-31 19:28:04       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 19:28:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 19:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 19:28:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 19:28:04       20 阅读

热门阅读

  1. MySQL 常用函数学习总结

    2024-01-31 19:28:04       31 阅读
  2. Docker

    Docker

    2024-01-31 19:28:04      28 阅读
  3. 第二百九十六回

    2024-01-31 19:28:04       34 阅读
  4. WriteFlow写作流GPT应用,激发创意的写作助手

    2024-01-31 19:28:04       34 阅读
  5. Python 安装 llama 库

    2024-01-31 19:28:04       39 阅读
  6. 使用HSE配置系统时钟

    2024-01-31 19:28:04       42 阅读
  7. 前端网站website

    2024-01-31 19:28:04       39 阅读
  8. adb控制设备状态

    2024-01-31 19:28:04       38 阅读