除以两个计数Oracle SQL

时间:2019-02-16 19:33:52

标签: sql oracle

我正在尝试编写我认为比较简单的查询,但是事实证明它比我想象的要难。我想将两个选择语句的结果分开:

Select count (*) from tableA where columnA = 'A'
/
Select count (*) from tableA where columnA in ('1','2')

我正在使用Oracle SQL Developer

感谢您的指导

2 个答案:

答案 0 :(得分:4)

我建议条件聚合。 。 。但使用sum()而不使用count()

Select (sum(case when columnA = 'A' then 1 else 0 end) /
        sum(case when columnA in ('1', '2') then 1 end)
       )
from tableA;

请注意,分母中缺少else。这样可以处理被零除的情况。

答案 1 :(得分:2)

您可以将,都视为一个主查询中的子查询:

select 
  (select count (*) from tableA where columnA = 'A')
/
  (select count (*) from tableA where columnA in ('1', '2'))
from dual

或者如果表名和列名实际上相同,则可以使用条件计数执行单个查询,例如:

select count (case when columnA = 'A' then columnA end)
       /
       count (case when columnA in ('1', '2') then columnA end)
from tableA
where columnA in ('A', '1', '2')

我已经修复了两个引号中的单引号,不确定这些引号是否只是发布问题的问题。

如果可能发生的话,您可能还需要添加逻辑以处理第二个计数为零,因为这将导致运行时错误。