Mysql 中子查询时order by与group by合用无效的解决办法

发布时间:2023年12月27日

存在一个需求:
需要获取某些条件下,在分组后,取最新的记录。

比如有张学生分数表,里面包含了学生一年的所有考试的语数外成绩,我想要获取同学A的最后一次考试成绩。

select * from (
select * from student_score where student_name ='A' order by id desc
) as A group by student_score;

思路问题不大
先筛选出同学A的成绩,按照id排序【默认id自增,最新一次考试的id是最大的】,然后将该查询结果作为子表,对分数进行分组。可是执行后发现,展示的结果好像并没有order by,也就是说子查询的order by失效了,解决办法

官方手册给出:

It must not have ORDER BY with LIMIT.

他们说order by 如果没有加limit 就会失效
加上limit:

select * from (
select * from student_score where student_name ='A' order by id desc limit 3
) as A group by student_score;

这里的limit 3 ,3代表的是语数外三门,可以大于3,不能够小于3

文章来源:https://blog.csdn.net/qq_31426247/article/details/135248969
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。