Bootstrap

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

   在实际操作过程中,有意或无意的会碰到这种问题。
   为了防止今后,在实际过程中,再次出现这样的问题,便有必要总结一番。
   笔者将造成这样问题的原因大致分为两类。
   第一类是聚合函数未嵌套情况下,符合分组条件,却并未使用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
总之,实际工作中,大凡碰到这样的错误,大体上就是属于这两类了,至于其他的,暂时没碰到过,就不必在此赘述了。
;