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

在存在聚合函數的時候容易出現排序的字段與查詢的字段不一致,修改為一致之后該問題解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM