MySQL - 全表分组后,获取组内排序首条数据信息

2023-10-03 15:30

本文主要是介绍MySQL - 全表分组后,获取组内排序首条数据信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 性能
    • 不详!!! 不详!!! 不详!!! 请谨慎使用!!!
  • 环境
    • MySQL服务: 8.0+版本;
  • 思路
    • 使用8.0+版本的新函数特性:
      • row_number(): 序号函数; 顾名思义, 就是给每组中的元素从1开始按顺序加上序号;
      • over(): 其中两个语法如下
        • partition: 按某字段分组;
        • order by: 按某字段排序;
      • 注意: 两函数详细使用方法可自行查询;
  • 第一步建表:
CREATE TABLE `t_score`  (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',`sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '性别',`score` double(20, 2) NULL DEFAULT NULL COMMENT '成绩',`subject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '科目',`create_time` datetime NULL DEFAULT NULL,`update_time` datetime NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
  • 第二步加数据:
INSERT INTO `t_score` VALUES (1, '张三', '男', 63.00, '语文', '2023-09-06 10:06:22', '2023-09-26 10:06:25');
INSERT INTO `t_score` VALUES (2, '李四', '男', 75.00, '语文', '2023-09-26 10:06:32', '2023-09-26 10:06:36');
INSERT INTO `t_score` VALUES (3, '小美', '女', 89.00, '语文', '2023-09-26 10:06:46', '2023-09-26 10:06:48');
INSERT INTO `t_score` VALUES (4, '张三', '男', 78.00, '数学', '2023-09-06 10:06:22', '2023-09-26 10:06:25');
INSERT INTO `t_score` VALUES (5, '李四', '男', 79.00, '数学', '2023-09-26 10:06:32', '2023-09-26 10:06:36');
INSERT INTO `t_score` VALUES (6, '小美', '女', 94.00, '数学', '2023-09-26 10:06:46', '2023-09-26 10:06:48');
INSERT INTO `t_score` VALUES (7, '张三', '男', 45.00, '英语', '2023-09-06 10:06:22', '2023-09-26 10:06:25');
INSERT INTO `t_score` VALUES (8, '李四', '男', 34.00, '英语', '2023-09-26 10:06:32', '2023-09-26 10:06:36');
INSERT INTO `t_score` VALUES (9, '小美', '女', 99.00, '英语', '2023-09-26 10:06:46', '2023-09-26 10:06:48');
  • 第三步看两函数效果:
    • 需求: 把每个人的成绩, 按照从高到低的顺序加上序号;
    • 思路: 按名称分组, 成绩排序, 然后给每组各行数据加上序号;
    • SELECT id, `name`, `score`,`subject`, ROW_NUMBER()OVER(PARTITION BY `name` ORDER BY `SCORE` DESC) AS row_index 
      FROM t_score;

      效果: 

  • 第四部实现最终需求:
    • 思路: 按名称分组,成绩排序,然后获取序号为1的数据;
    • 脚本:
      • SELECT * 
        FROM(SELECT id, `name`, `score`,`subject`, ROW_NUMBER()OVER(PARTITION BY `name` ORDER BY `SCORE` DESC) AS row_index FROM t_score) AS ib
        WHERE ib.row_index = 1;
    • 效果

这篇关于MySQL - 全表分组后,获取组内排序首条数据信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525

相关文章

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如