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

sisophon 2019-10-13 PM 253℃ 0条

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

全部数据显示:
001.png
mysql5.6使用sql:

select a.score,a.name from ( select * from hehe order by id desc  ) a  group by a.name;

结果:
002.png
mysql5.7使用同样语句:
003.png

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

第二种方法:

使用: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;

005.png
小李的是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

非特殊说明,本博所有文章均为博主原创。

评论啦~