当前位置:趣知科普网>职场理财>职场就业>

oracle中group by 和order by

职场就业 阅读(7.73K)

不论是学习和工作中,我们可能遇到过在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中出现

如果大家觉得帮到了您,希望能投上您宝贵的一票,真诚地感谢您。