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是正序的,也就是取到了最开始访问时间的记录
//排序之后也就没把最新的访客展示出来了