多语言展示
当前在线:1574今日阅读:91今日分享:37

oracle中group by 和order by

不论是学习和工作中,我们可能遇到过在oracle中结合使用group by 和 order by语句。但是在使用的过程中总会出现一些错误,下面给大家分享一下几种结合使用过程中的常见错误。
工具/原料

win8系统64位,oracle 、plsql

方法/步骤
1

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

2

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

3

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

4

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

5

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

6

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

7

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

8

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

9

果然,执行上述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_lxorder 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_mcorder by fw.zb_mc;

注意事项
1

distinct 和order by结合使用的方式:order by中的字段一定要在distinct后出现。

2

Group by 和 order by 结合使用的方式:因为order by出现的字段必须要在group by 中出现,而group by 中出现的字段 不一定要在order by中出现

3

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

推荐信息