group by 和 order by 一起使用时,会先使用group by 分组,并取出分组后的第一条数据,所以后面的order by 排序时根据取出来的第一条数据来排序的,但是第一条数据不一定是分组里面的最大数据。
解决方案:
可以先排序,再分组,再排序:使用子查询。
SELECT
r.id,
r.uid,
r.age ,
r.datatime
FROM (SELECT
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中的字段名和上面的查询名字一致:
在存在聚合函数的时候容易出现排序的字段与查询的字段不一致,修改为一致之后该问题解决