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

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

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

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

相关推荐
拍客圈40 分钟前
数据主站+副站做的设置
数据库
计算机学长felix1 小时前
基于SpringBoot的“面向校园的助力跑腿系统”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
金仓拾光集2 小时前
__工艺数据管理的范式转变:金仓数据库替代MongoDB实操实践__
数据库·mongodb
xiaogg36782 小时前
redis-cluster集群配置部署
数据库·redis·缓存
运维小文2 小时前
MySQL高可用方案MIC&mysqlCluster+mysqlRouter
数据库·mysql·mic·mysql高可用·mysqlcluster·mysqlrouter
不剪发的Tony老师2 小时前
Redis Commander:一款基于Web、免费开源的Redis管理工具
数据库·redis
IT教程资源C2 小时前
(N_157)基于springboot,vue服装商城系统
mysql·vue3·前后端分离·springboot服装商城
金仓拾光集3 小时前
__金仓数据库替代MongoDB护航医疗隐私:医院患者随访记录安全存储实践__
数据库·安全·mongodb
Tiandaren3 小时前
自用提示词02 || Prompt Engineering || RAG数据切分 || 作用:通过LLM将文档切分成chunks
数据库·pytorch·深度学习·oracle·prompt·rag