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

条件:
查询出学生最后一次的成绩。

全部数据显示:

Mysql5.7中子查询时order by与group by合用无效的解决办法_第1张图片
mysql5.6
使用sql:
select a.score,a.name from ( select * from hehe order by id desc  ) a  group by a.name;
结果:

Mysql5.7中子查询时order by与group by合用无效的解决办法_第2张图片

mysql5.7
使用同样语句:

Mysql5.7中子查询时order by与group by合用无效的解决办法_第3张图片

可以看出order by失效了
5.7官方手册给出:
It must not have ORDER BY with LIMIT.
他们说order by 如果没有加limit 就会失效
加上limit:

Mysql5.7中子查询时order by与group by合用无效的解决办法_第4张图片

可以了
第二种方法:
使用:substring_index 和concat_group函数
5.6 5.7均可

SELECT SUBSTRING_INDEX(GROUP_CONCAT(score ORDER BY id desc),',',1) as score,name  from   hehe  group by  name;

Mysql5.7中子查询时order by与group by合用无效的解决办法_第5张图片

小李的是90 上一个是null concat_group 把小李最新成绩为null的过滤掉了 大家根据情况使用

简单介绍下substring_index:

substring_index(str,delim,count) 
说明:substring_index(被截取字段,关键字,关键字出现的次数) 

concat_group 使用方法详见:https://blog.csdn.net/qq_34206560/article/details/88358982

你可能感兴趣的:(Mysql)