laravel 中用group by和order by排序不正确的问题解决
mysql中order by是在group by之后执行的,而group by则是在同一组数据里挑选出id最小的数据记录作为汇总记录
group by 和 order by 一起使用时,会先使用group by 分组,并取出分组后的第一条数据,所以后面的order by 排序时根据取出来的第一条数据来排序的,但是第一条数据不一定是分组里面的最大数据。
解决方案:
可以先排序,再分组,再排序:使用子查询。
SELECT
r.id,
r.uid,
r.age ,
r.datatime
FROM (SELECT
id,
uid,
age ,
datatime
FROM student
ORDER BY age DESC) r
GROUP BY r.uid
ORDER BY r.age DESC;
注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。
关于GroupBy和OrderBy在使用中的一些注意点:
1.这两个在一起使用时,先分组(GroupBy)再排序(OrderBy);
2.在这两个都用上了之后,一定要注意在OrderBy中的字段名和上面的查询名字一致:
在存在聚合函数的时候容易出现排序的字段与查询的字段不一致,修改为一致之后该问题解决