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

news2024/12/22 22:02:35
  • 性能
    • 不详!!! 不详!!! 不详!!! 请谨慎使用!!!
  • 环境
    • 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;
    • 效果

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

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

相关文章

【深度学习实验】前馈神经网络(final):自定义鸢尾花分类前馈神经网络模型并进行训练及评价

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集(IrisDataset) 2. 构建模型(FeedForward) a. __init__(初始化) b. forward(前向传播) 3.整合训练、评估…

Json文件反序列化读取

Json文件 [{"name":"清华大学","location":"北京","grade":"1"},{"name":"北京大学","location":"北京","grade":"2"} ] 安装包 代码 Program.c…

Redis应用(8)——Redis的项目应用:结合SpringBoot如何在Redis里面存对象 RedisUtil工具类的封装 遇到的问题

前言 Redis作为一款优秀的开源、高效的内存数据库,在各种项目中都能见到其身影,熟练使用Redis是程序员必备的技能之一。本系列博客结合应用场景,阐述Redis从安装到使用的,从入门到进阶的相关内容。 本篇博客介绍在Spring项目中&…

免费AI人工智能,人工智能写文章软件

在当今信息爆炸的时代,内容创作已经成为了无处不在的需求。从博客、新闻报道到广告宣传,人们对于高质量的文本内容的需求愈发迫切。然而,面对繁忙的生活节奏和不断增长的写作任务,许多创作者感到焦头烂额。 从博客作者到广告写手&…

系统集成|第十六章(笔记)

目录 第十六章 信息(文档)和配置管理16.1 文档管理16.2 配置管理 上篇:第十五章、采购管理 下篇:第十七章、变更管理 第十六章 信息(文档)和配置管理 16.1 文档管理 信息系统项目相关信息(文档…

记录一次错误---想让U-net网络输入大小不一致的图片

最近在看Deeplab系列的论文,文中提到了语义分割领域的一个难题是:将图片输入网络之前需要resize成统一大小,但是resize的话会造成细节信息的损失,所以想要网络处理任意大小的图片输入。我之前训练的U-net网络都是resize成224*224大…

基于若依ruoyi-nbcio支持flowable流程角色,同时修改流转用户为username,流程启动做大调整(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: ruoyi-nbcio: nbcio-boot的若依版本,基于ruoyi-flowable-plus和flowable6.7.2,目前处于移植功能阶段,目标是打造一个最好的若依平台上flowable流程管理系统开源版本&#xff0c…

【项目】Http服务器

【项目】Http服务器 项目简介 背景: http协议被广泛使用,从移动端,pc端浏览器,http协议无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可撼动,是能准确区分前后台的重要协议。 描述&a…

MD5 绕过第一式:弱比较绕过

文章目录 参考环境MD5韧性脆弱性md5() 隐式类型转换字符串连接数学运算布尔判断相等运算符 科学计数法科学计数法前缀 0E 与 0e PHP8 与 PHP 其他版本下字符串转化为数值的具体规则PHP8数值字符串优化 其他版本更为详细的讲解 字符串与字符串的弱比较字符串与数值的弱比较0e215…

git查看自己所在的分支

很多时候可能大家不太想切换其他工具,又不知道自己是否在自己需要操作的分支 可以直接终端执行 git branch此时 他就会在终端将所有的本地分支输出出来 并特殊标注自己所在的分支 这样我们就可以进一步去做自己想要做的操作了 当然 随着各种编辑器的发展 这个命令…

视频剪辑软件哪个好? 2023年最新功能解析

如今聊到视频的话题,大家可能都注意到近年来火爆的抖音短视频。从图片到动画,从动画到视频。时代在发展,技术在更新。到了近几年小视频也火了,其实不乏缺有视频剪辑软件的功劳。现在不少朋友在业余时间都喜欢剪辑视频来丰富自己的…

支撑电动汽车规模化,特来电智能化升级群充产品

9月26日,中国领先的充电网生态运营商特来电重磅发布智能群充4.0产品,标志着特来电群充产品体系进一步升级,充电行业迎来更高质量、更高性能的设备与系统,充电网基础设施将更好地支撑大规模电动汽车的发展。 群充技术路线引领充电…

音频处理基础的一些笔记碎片

感谢 B 站上关于 EQ 扫盲视频分享 🔊声音变好听-让均衡器改变你的音色|均衡器怎么调?(adobe audition 2020基础教程) 简要内容 a. 人耳能够听到的频率 20HZ-20000HZ; b. 人耳普遍认为低于 80HZ 是噪声; c. …

华为智能企业上网行为管理安全解决方案(1)

华为智能企业上网行为管理安全解决方案(1) 课程地址方案背景需求分析企业上网行为概述企业上网行为安全风险分析企业上网行为管理需求分析 方案设计组网架构设备选型设备简介行为管理要点分析方案功能概述 课程地址 本方案相关课程资源已在华为O3社区发…

MQTT协议知识梳理,看完你就懂了!

一.MQTT简介 MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布/订阅信息传输协议。MQTT在时间和空间上,将消息发送者与接受者分离,可以在不可靠的网络环境中进行扩展。 适用于设备硬件存储空间有限或网络带宽有限的场景。物…

SpringBoot 员工管理---通用模板 ---苍穹外卖day2

感谢点击 希望你有所收获! 目录 1.新增员工 需求分析:根据页面原型进行业务分析 接口设计 数据库设计 代码开发 功能测试 如何在接口文档中统一添加JWT令牌 ​ 获取当前登录员工的ID 2.员工分页查询 需求分析 代码开发 如何将日期格式化 ​3.启用禁用员工 1.新…

软件设计模式——工厂模式

摘要 本博文主要介绍软件设计模式中工厂模式,其中工厂设计模式的扩展为简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)三种。 一、简单工厂(Simple Factory) 主要分析设计模式 - 简单工厂(Simple Factory),它把实例…

day07_方法

今日内容 零、 复习昨日 一、作业讲解 二、方法[重点] 零、 复习昨日 一、作业讲解 package com.qf.homework;import java.util.Scanner;/*** desc*/ public class Homework {public static void main(String[] args) {/*** --------------------* 边写边测试* 以结果倒推* …

HTML详细基础(二)文件路径

目录 一.相对路径 二.绝对路径 三.超链接标签 四.锚点链接 首先,扩展一些HTML执行的原理: htmL(hypertext markup Language) 是一种规范(或者说是一种标准),它通过标记符(tag)来标记要显示…

D课堂 | 什么是DNS?DNS是怎么运作的?

想象一下,你在一个陌生的城市,想去一家餐厅品尝美食。你知道这家餐厅的名字,但却不知道它的具体位置。 这时,你可能会打开手机地图,输入餐厅的名字,然后地图会告诉你如何到达那里。 在互联网世界里&#xf…