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中的字段名和上面的查詢名字一致:
在存在聚合函數的時候容易出現排序的字段與查詢的字段不一致,修改為一致之后該問題解決