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中出现
如果大家觉得帮到了您,希望能投上您宝贵的一票,真诚地感谢您。