欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 【问题解决】MySQL 5.7 版本 GROUP BY 组内排序无效的解决方法

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

2025/5/6 22:41:14 来源:https://blog.csdn.net/m0_50513629/article/details/140965612  浏览:    关键词:【问题解决】MySQL 5.7 版本 GROUP BY 组内排序无效的解决方法

文章目录

  • 问题描述
  • 形成原因
  • 解决方案
    • 方案一:使用 HAVING 关键字
    • 方案二:使用 LIMIT 关键字
    • 方案三: 使用 DISTINCT 关键字。
    • 方案四: 使用子查询。
    • 方案五: @count :=@count+1。
    • 方案六: OVER() 函数(MySQL 8 新特性)

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

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

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


问题描述

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

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)

SELECT *
FROM (SELECT * FROM student HAVING  1=1 ORDER BY create_time DESC) s
GROUP BY s.class_number;

方案二:使用 LIMIT 关键字

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

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

SELECT *
FROM (SELECT * FROM student ORDER BY create_time DESC LIMIT 1000000) s
GROUP BY s.class_number;

方案三: 使用 DISTINCT 关键字。

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

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

SELECT *
FROM (SELECT DISTINCT(id), student_name, class_number FROM student ORDER BY create_time DESC) s
GROUP BY s.class_number;

方案四: 使用子查询。

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

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() 函数,最后我尝试了这个方案后生效了。

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;

方案六: OVER() 函数(MySQL 8 新特性)

这个方案要求数据库版本必须达到 MySQL 8。

SELECT *
FROM(SELECT t.*, ROW_NUMBER() OVER(PARTITION BY idORDER BY update_time DESC) updateTimeFROM student AS s) AS latest
WHERE updateTime = 1;

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

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词