ORA-00937(ora00936)

http://www.itjxue.com  2023-01-25 19:26  来源:未知  点击次数: 

ora-00937错误疑问

这个错的表示的是:

ORA-00937: 非单组分组函数

max()函数一般同group by一起使用。但是照这个语句看,语法是正确的,我在自己环境也测试了,没什么问题。至于为什么会这样,不是太清楚了、

SELECT MAX ..... ORA-00937

一般来说,如果出现上述“ORA-00937: 非单组分组函数”的错误是因为select 列表项中除了包含聚合函数外,还包含了表的某些列,那么你将必须使用group by语句,否则语法通不过。

如:select deptno,job,avg(sal) from emp group by deptno,job;(正确)

select deptno,job,avg(sal) from emp(错误)。

但看你的sql语句应该不会有错吧。你再确认一下。

oracle有关ORA-00937:不是单组分组函数

sum是分组函数,不能和distinct合用,实际上分组函数已经起了distinct的作用.正确的写法是

select shop_area_code, sum(cash/100) from ... group by shop_area_code

ORA-00937: 不是单组分组函数

实例:select deptno,count(empno) from emp;

报错:不是单组分组函数

原因:

1, 如果程序中使用了分组函数,则有两种情况可以使用:

程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来

改为:

select deptno,count(empno) from emp group by deptno;

如果不使用分组的活,则只能单独使用分组函数

改为:

select count(empno) from emp;

2, 在使用分组函数的时候,不能出现分组条件之外的字段

总结:在select需要查询的语句中选中的字段,必须出现在group by子句中

顺利分组

SELECT

listagg(t.NAME , ',') WITHIN GROUP (ORDER BY a.CREATE_DATE) AS tName

FROM

AMASSRH.INFO_TB_SUBJECT a

LEFT JOIN AMASSRH.INFO_TB_BUILDING b ON a.BUILDING_ID = b.id

LEFT JOIN AMASSRH.CM_TB_TAG_SUBJECT_RELATION g ON a.id = g.SUBJECT_ID

LEFT JOIN AMASSRH.CM_TB_TAG t ON g.TAG_ID = t.id

WHERE

a.DEL_FLAG = '0'

AND b.DEL_FLAG = '0'

AND g.DEL_FLAG = '0'

AND a.PLACE_TYPE = '01'

AND t.DEL_FLAG = '0'

AND a.id = '49'

ora-00937 不是单分组函数

select 列表项中除了包含聚合函数外,还包含了表的某些列,那么将必须使用group by语句,否则语法通不过。

例如:

SQL

1 select deptno,job,avg(sal)

2 from emp

3 ;ERROR 位于第 1 行:ORA-00937: 非单组分组函数

其实这里也非常容易理解,既然指定了聚合函数,又同时制定了其他列,还想不按照指定的列来分组,那么到底想让oracle怎么做呢?这根本就得不出结果。就像需要统计班上男女生的人数,但是又不能分组,只能在一条数据里表示出来,怎么能办得到呢?所以这里的group by是必须的。

上面的错误纠正为:select deptno,job,avg(sal) from emp group by deptno,job;

(责任编辑:IT教学网)

更多

相关Flash教程文章

推荐Flash教程文章