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……)