網站首頁 健康小知識 母嬰教育 起名 運動知識 職場理財 情感生活 綠色生活 遊戲數碼 美容 特色美食 愛好

oracle中group by 和order by

欄目: 職場就業 / 發佈於: / 人氣:5.96K

不論是學習和工作中,我們可能遇到過在oracle中結合使用group by 和 order by語句。但是在使用的過程中總會出現一些錯誤,下面給大家分享一下幾種結合使用過程中的常見錯誤。

操作方法

(01)首先以 frtm_ld2_wbjyzbdf為例,查詢表的數據可以看到:

oracle中group by 和order by

(02)情況一:使用distinct關鍵字,再結合order by 語句使用,若執行:select distinct _mc  from frtm_ld2_wbjyzbdf fw  order by  length(_lx) ; 如果執行當前sql則會出現如下錯誤:

oracle中group by 和order by 第2張

(03)若換一種寫法,如果將以上sql的order by中的字段放到select distinct中如:select distinct _mc,_lx  from frtm_ld2_wbjyzbdf fworder by  length(_lx) ;

oracle中group by 和order by 第3張

(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  ;

oracle中group by 和order by 第4張

(06)情況三:結合上述語句,在order by 中加上個字段 如:select _mc  from  frtm_ld2_wbjyzbdf fw group by _mcorder by length(_lx),_mc;可見會報錯。

oracle中group by 和order by 第5張

(07)情況四:有些小夥伴們可能想上述為啥還報錯呢,難道是order by中出現的字段沒有在select 中出現麼,下面來改一下:select _mc,max(_lx)  from  frtm_ld2_wbjyzbdf fw group by _mcorder by length(_lx),_mc;

oracle中group by 和order by 第6張

(08)可是還會報錯,為什麼呢?下面就在group by上再加上:select _mc,_lx  from  frtm_ld2_wbjyzbdf fw group by _mc,_lxorder by length(_lx),_mc;這樣之後再來執行一下:

oracle中group by 和order by 第7張

(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;

oracle中group by 和order by 第8張

特別提示

distinct 和order by結合使用的方式:order by中的字段一定要在distinct後出現。

Group by 和 order by 結合使用的方式:因為order by出現的字段必須要在group by 中出現,而group by 中出現的字段 不一定要在order by中出現

如果大家覺得幫到了您,希望能投上您寶貴的一票,真誠地感謝您。