關於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……)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章