关于MySQL的order by与group by的组合使用

group by会用吧?order by也会用吧?可是,同时使用的时候,结果却有了出入?

那么,那么在你郁闷的时候,静下心来思考吧……


在group by 和order by同时使用的时候,你的排序策略(即asc or desc)会直接影响结果和写法的

分析

1.group by 先于order by执行

2.group by 的时候 会首先对结果进行排序 然后再分组的

3.group by 的排序是升序的

4.如果你只是排分组字段的顺序为升序,那么你都可以不用order by 直接group by的结果就ok

5.如果是降序 或者其他字段 那么 可能你类似这样的写法

select *  from table group by xxx order by  xxx;

得到的结果就可能不对的


方案

如果你想得到正确的结果 就要

select * from (select *  from table  order by  xxx desc)temp group by xxx ;

或者再加order by 得到你需要的排序


注意

采用先排序后分组的写法后,where条件的位置请小心啦

select * from (select *  from table  order by  xxx desc)temp  where column1='xxx' group by xxx ;#注意where写在这里会导致排序的工作,所以这个写法极可能导致错误

select * from (select *  from table where column1='xxx'  order by  xxx desc)temp  group by xxx ;#这是推荐写法



(ps:be always thinking……)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章