oracle中group by 和order by
不論是學習和工作中,我們可能遇到過在oracle中結合使用group by 和 order by語句。但是在使用的過程中總會出現一些錯誤,下面給大家分享一下幾種結合使用過程中的常見錯誤。
操作方法
(01)首先以 frtm_ld2_wbjyzbdf為例,查詢表的資料可以看到:
(02)情況一:使用distinct關鍵字,再結合order by 語句使用,若執行:select distinct _mc from frtm_ld2_wbjyzbdf fw order by length(_lx) ; 如果執行當前sql則會出現如下錯誤:
(03)若換一種寫法,如果將以上sql的order by中的欄位放到select distinct中如:select distinct _mc,_lx from frtm_ld2_wbjyzbdf fworder by length(_lx) ;
(04)由此可見可得出:如果使用distinct關鍵字,且使用了order by。order by中的欄位一定要在distinct後出現。
(05)情況二:select中、group by中、order by 中欄位一致:select _mc from frtm_ld2_wbjyzbdf fw group by _mcorder by _mc ;
(06)情況三:結合上述語句,在order by 中加上個欄位 如:select _mc from frtm_ld2_wbjyzbdf fw group by _mcorder by length(_lx),_mc;可見會報錯。
(07)情況四:有些小夥伴們可能想上述為啥還報錯呢,難道是order by中出現的欄位沒有在select 中出現麼,下面來改一下:select _mc,max(_lx) from frtm_ld2_wbjyzbdf fw group by _mcorder by length(_lx),_mc;
(08)可是還會報錯,為什麼呢?下面就在group by上再加上:select _mc,_lx from frtm_ld2_wbjyzbdf fw group by _mc,_lxorder by length(_lx),_mc;這樣之後再來執行一下:
(09)果然,執行上述sql就是正確的,為什麼呢?因為order by出現的欄位必須要在group by 中出現,而group by 中出現的欄位 不一定要在order by中出現。下面再來看一個例子:如果我去掉order by 中的一個欄位或者去掉select 中的一個 欄位 都不會報錯。select _mc from frtm_ld2_wbjyzbdf fw group by _mc,_lxorder by length(_lx),_mc;select _mc,max(_lx) from frtm_ld2_wbjyzbdf fw group by _mcorder by _mc;
特別提示
distinct 和order by結合使用的方式:order by中的欄位一定要在distinct後出現。
Group by 和 order by 結合使用的方式:因為order by出現的欄位必須要在group by 中出現,而group by 中出現的欄位 不一定要在order by中出現
如果大家覺得幫到了您,希望能投上您寶貴的一票,真誠地感謝您。