oracle中group by 和order by

2025-11-05 16:16:49

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

oracle中group by 和order by

2、情况一:使用distinct关键字,再结合order by 语句使用,若执行:

select distinct fw.zb_mc  from frtm_ld2_wbjyzbdf fw  order by  length(fw.zb_lx) ; 如果执行当前sql则会出现如下错误:

oracle中group by 和order by

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

oracle中group by 和order by

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_mc

order by fw.zb_mc  ;

oracle中group by 和order by

6、情况三:结合上述语句,在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;可见会报错。

oracle中group by 和order by

7、情况四:有些小伙伴们可能想上述为啥还报错呢,难道是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;

oracle中group by 和order by

8、可是还会报错,为什么呢?下面就在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;这样之后再来执行一下:

oracle中group by 和order by

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

oracle中group by 和order by

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢