使用子查询计算SQL Oracle的百分比

时间:2015-10-18 17:38:19

标签: sql oracle

我的意图是获得一定比例的积极(COMISSAO)但在主要选择( Select to_number(Count(*)) FROM EMPREGADO )上使用子查询时出错。

我计算百分比的意思是:

(3 [Comissao阳性人数] * 100)/ 14 [总人数]

TABLE EMPREGADO:

NUMEMP|COMISSAO

7839|(Null)
7566|(Null)
7782|(Null)
7698|(Null)
7788|(Null)
7844|0
7900|(Null) 
7902|(Null)
7369|(Null) 
7499|   300
7521|   500
7654|   1400
7876|(Null) 
7934|(Null) 

SELECT (COUNT(NVL(EMP.COMISSAO,0))*100)/(Select to_number(Count(*)) FROM EMPREGADO)
    FROM  EMPREGADO EMP
    WHERE EMP.COMISSAO>0

预期输出为:21

2 个答案:

答案 0 :(得分:2)

不需要标量子查询,只需执行条件聚合:

SELECT COUNT(NULLIF(EMP.COMISSAO,0))*100)/(Count(*)
FROM  EMPREGADO EMP

答案 1 :(得分:2)

您需要的只是一个位置很好的CASE声明:

select
  count(case when comissao > 0 then 1 else null end) * 100.0 / count(*)
from empergado

以下是一个示例SQLFiddle,其中包含查询的工作原理。