MySQL中同时使用order by与group by的顺序
- 27584
- MySQL
- 9
- super_dodo
- 2015/07/08
正常情况下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是正序的,也就是取到了最开始访问时间的记录 //排序之后也就没把最新的访客展示出来了
不能既配不上自己的野心,又辜负自己曾经受的苦。
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例