在实际操作过程中,有意或无意的会碰到这种问题。
为了防止今后,在实际过程中,再次出现这样的问题,便有必要总结一番。
笔者将造成这样问题的原因大致分为两类。
第一类是聚合函数未嵌套情况下,符合分组条件,却并未使用group by语句或者错误使用group语句进行分组。
如下:
SQL> select deptno,max(sal) from emp;
select deptno,max(sal) from emp
*
第 1 行出现错误:
ORA-00937: 不是单组分组函数
正确语句如下:
SQL> select deptno,max(sal) from emp group by deptno;
DEPTNO MAX(SAL)
------ ----------
30 2000
0
20 2000
10 2000
第二类是聚合函数嵌套情况下(如max(avg(sal))),符合分组条件,却并未正确使用group by语句进行分组。
如下例子所示:
SQL> select deptno "部门编号" ,max(avg(sal)) "部门平均工资的最大值" from emp group by deptno;
select max(avg(sal)) "部门平均工资的最大值",deptno "部门编号"
*
第 1 行出现错误:
ORA-00937: 不是单组分组函数
正确语句如下:
select a.deptno "部门编号" ,max(a.new_avg) "部门平均工资的最大值" from (select avg(sal) as new_avg,deptno from
emp group by deptno) a group by a.deptno;
部门编号 部门平均工资的最大值
---------- --------------------
30 2000
0
20 2000
10 2000
总之,实际工作中,大凡碰到这样的错误,大体上就是属于这两类了,至于其他的,暂时没碰到过,就不必在此赘述了。