我的表结构如下:SQL> desc emp;
Name    Type         Nullable Default Comments 
------- ------------ -------- ------- -------- 
ENAME   VARCHAR2(20) Y                         
EMPNO   VARCHAR2(20) Y                         
SAL     NUMBER(6,2)  Y                         
DEPTNO  NUMBER(2)    Y                         
JOB     VARCHAR2(20) Y                         
COMM    NUMBER(6,2)  Y                         
EMPDATE DATE         Y                         
求 雇员总数,以及获得补助的雇员数。
      SELECT COUNT(*),(SELECT COUNT(emp.empno) FROM emp WHERE emp.comm IS NOT NULL) AS comm_total FROM emp;这个老是报错,为什么啊?正确的该怎么写? 

解决方案 »

  1.   


    SELECT COUNT(*),
           AVG((SELECT COUNT(EMP.EMPNO)
                 FROM SCOTT.EMP
                WHERE EMP.COMM IS NOT NULL)) AS COMM_TOTAL
      FROM SCOTT.EMP;
      

  2.   


    SELECT COUNT(*)  , SUM(decode(comm,NULL,0,1)) comm_total
      FROM SCOTT.EMP;
      

  3.   

      SELECT COUNT(*)  , SUM(decode(comm,NULL,0,1)) comm_total
      FROM EMP;
      

  4.   


    SELECT COUNT(*)  , SUM(CASE WHEN comm>0 THEN 1 ELSE 0 END) comm_total
      FROM SCOTT.EMP;上面的三种方法都可以完成类似的功能,但是最后的应该更准确,因为comm=0也不应该算获得补助