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中的字段名和上面的查询名字一致:

在存在聚合函数的时候容易出现排序的字段与查询的字段不一致,修改为一致之后该问题解决

posted @ 2020-11-29 20:44  caibaotimes  阅读(1913)  评论(0编辑  收藏  举报