【问题解决】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;

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

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

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

相关推荐
阳光明媚sunny1 小时前
Room持久化库中,@Transaction注解的正确使用场景是?
android·数据库
北极糊的狐1 小时前
MySQL常见报错分析及解决方案总结(15)---Can’t connect to MySQL server on ‘localhost‘ (10061)
数据库·mysql
濑户川1 小时前
Django5 与 Vue3 表单交互全解析:从基础到实战
数据库
weixin_438077491 小时前
langchain官网翻译:Build a Question/Answering system over SQL data
数据库·sql·langchain·agent·langgraph
陈一Tender2 小时前
JavaWeb后端实战(MySql基础)
mysql
-雷阵雨-2 小时前
MySQL——数据库操作攻略
数据库·mysql
krielwus2 小时前
Oracle ORA-01653 错误检查以及解决笔记
数据库·oracle
Wadli2 小时前
csdn| MySQL
数据库·mysql
程序员水自流3 小时前
MySQL InnoDB存储引擎关键核心特性详细介绍
java·数据库·mysql
-雷阵雨-3 小时前
MySQL——表的操作
数据库·mysql