group by 比order by先执行

8/24/2021 5:01:01 PM

正常情况下mysql 中order by 与group by的顺序 是:

SELECT * FROM table_name

WHERE  

GROUP BY

ORDER BY

注意:group by 比order by先执行,且group by 是按照正序排序的。group by 之后只会出现一条记录。order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group by中最大的或最小的某一字段使用 max或min函数。

例:当某个应用有用户之间的访客记录,每次访问的时候就会记录一条信息。当用户查看用户的访客记录的时候,就需要用到group by(因为多次访问仅展示一次),这个时候还需要用到order by(对于最新访问的用户排序到最前面)

简单的访客记录表有 id,user_id,visit_id,add_time 每次访问都会产生一个记录

正确的符合逻辑的查询方式语句是:

//正确的逻辑(也可以根据时间或者id都可以)

SELECT *,max(add_time) as maxtime FROM visit_list WHERE user_id=1 GROUP BY(visit_id) ORDER BY maxtime DESC; 

//有问题的语句

SELECT * FROM visit_list WHERE user_id=1 GROUP BY(visit_id) ORDER BY add_time DESC;

//这样是能查询出访客的记录,但是访客的时间不是最新的,

//因为group by是正序的,也就是取到了最开始访问时间的记录

//排序之后也就没把最新的访客展示出来了