【问题解决】MySQL 5.7 版本 GROUP BY 组内排序无效的解决方法

文章目录

  • 问题描述
  • 形成原因
  • 解决方案
    • [方案一:使用 HAVING 关键字](#方案一:使用 HAVING 关键字)
    • [方案二:使用 LIMIT 关键字](#方案二:使用 LIMIT 关键字)
    • [方案三: 使用 DISTINCT 关键字。](#方案三: 使用 DISTINCT 关键字。)
    • [方案四: 使用子查询。](#方案四: 使用子查询。)
    • [方案五: @count :=@count+1。](#方案五: @count :=@count+1。)

我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持


问题描述

查询每个班最后一个加入的学生信息。

sql 复制代码
SELECT *
FROM (SELECT * FROM student ORDER BY create_time DESC) s
GROUP BY s.class_number;

形成原因

在 5.7 版本中引入新特性 derived_merge 优化过后,group by子句中使用order by导致order by失效。

解决方案

方案一:使用 HAVING 关键字

HAVING 关键字的详细说明和用法请看文章:

【MySQL】数据分组(关键字:GROUP BY)过滤分组(关键字:HAVING)

sql 复制代码
SELECT *
FROM (SELECT * FROM student HAVING  1=1 ORDER BY create_time DESC) s
GROUP BY s.class_number;

方案二:使用 LIMIT 关键字

LIMIT 关键字的详细说明和用法请看文章:

【MySQL】查询结果,对结果进行限制(关键字:LIMIT 和 OFFSET)

sql 复制代码
SELECT *
FROM (SELECT * FROM student ORDER BY create_time DESC LIMIT 1000000) s
GROUP BY s.class_number;

方案三: 使用 DISTINCT 关键字。

DISTINCT 关键字的详细说明和用法请看文章:

【MySQL】查询数据,过滤重复结果数据(关键字:DISTINCT)

sql 复制代码
SELECT *
FROM (SELECT DISTINCT(id), student_name, class_number FROM student ORDER BY create_time DESC) s
GROUP BY s.class_number;

方案四: 使用子查询。

如果有有序递增的主键 id 或其他字段,可以使用子查询的思路实现。

sql 复制代码
SELECT * FROM student WHERE id IN (SELECT MAX(id) FROM student GROUP BY class_number);

方案五: @count :=@count+1。

查询的字段中 增加 @count :=@count+1

公司的数据库是 MySQL 5.7 版本,很奇怪,使用了上面所有的方法后,仍然不生效,又无法使用 MySQL 8OVER() 函数,最后我尝试了这个方案后生效了。

sql 复制代码
SELECT id, student_name, class_number, @count :=@count+1
FROM (SELECT id, student_name, class_number, @count :=@count+1 FROM student ORDER BY create_time DESC) s
GROUP BY s.class_number;

我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持

相关推荐
剩下了什么7 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥7 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉7 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变7 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
WangYaolove13149 小时前
基于python的在线水果销售系统(源码+文档)
python·mysql·django·毕业设计·源码
山岚的运维笔记9 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里10 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科10 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦10 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总10 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法