oracle中group by 和order by

作者:小橘猫 | 创建时间: 2023-06-03
不论是学习和工作中,我们可能遇到过在oracle中结合使用group by 和 order by语句。但是在使用的过程中总会出现一些错误,下面给大家分享一下几种结合使用过程中的常见错误。...
oracle中group by 和order by

操作方法

首先以 frtm_ld2_wbjyzbdf为例,查询表的数据可以看到:

情况一:使用distinct关键字,再结合order by 语句使用,若执行: select distinct fw.zb_mc  from frtm_ld2_wbjyzbdf fw  order by  length(fw.zb_lx) ; 如果执行当前sql则会出现如下错误:

若换一种写法,如果将以上sql的order by中的字段放到select distinct中如: select distinct fw.zb_mc,fw.zb_lx  from frtm_ld2_wbjyzbdf fw order by  length(fw.zb_lx) ;

由此可见可得出:如果使用distinct关键字,且使用了order by。order by中的字段一定要在distinct后出现。

情况二:select中、group by中、order by 中字段一致:select fw.zb_mc  from  frtm_ld2_wbjyzbdf fw group by fw.zb_mc order by fw.zb_mc  ;

情况三:结合上述语句,在order by 中加上个字段 如:select fw.zb_mc  from  frtm_ld2_wbjyzbdf fw group by fw.zb_mc order by length(fw.zb_lx),fw.zb_mc;可见会报错。

情况四:有些小伙伴们可能想上述为啥还报错呢,难道是order by中出现的字段没有在select 中出现么,下面来改一下: select fw.zb_mc,max(fw.zb_lx)  from  frtm_ld2_wbjyzbdf fw group by fw.zb_mc order by length(fw.zb_lx),fw.zb_mc;

可是还会报错,为什么呢?下面就在group by上再加上:select fw.zb_mc,fw.zb_lx  from  frtm_ld2_wbjyzbdf fw group by fw.zb_mc,fw.zb_lx order by length(fw.zb_lx),fw.zb_mc;这样之后再来执行一下:

果然,执行上述sql就是正确的,为什么呢?因为order by出现的字段必须要在group by 中出现,而group by 中出现的字段 不一定要在order by中出现。下面再来看一个例子: 如果我去掉order by 中的一个字段或者去掉select 中的一个 字段 都不会报错。select fw.zb_mc  from  frtm_ld2_wbjyzbdf fw group by fw.zb_mc,fw.zb_lx order by length(fw.zb_lx),fw.zb_mc; select fw.zb_mc,max(fw.zb_lx)  from  frtm_ld2_wbjyzbdf fw group by fw.zb_mc order by fw.zb_mc;

温馨提示

distinct 和order by结合使用的方式:order by中的字段一定要在distinct后出现。
Group by 和 order by 结合使用的方式:因为order by出现的字段必须要在group by 中出现,而group by 中出现的字段 不一定要在order by中出现
如果大家觉得帮到了您,希望能投上您宝贵的一票,真诚地感谢您。
点击展开全文

更多推荐