如何在Oracle中执行countIf()

ams*_*am1 7 sql oracle countif

如何选择一个输出与excel函数相同的变量:

COUNTIFS(A1:D1,"<25", A1:D1, ">16")?
Run Code Online (Sandbox Code Playgroud)

即计算我的四个字段中的值在16到25之间的次数.

mat*_*guy 6

您可以使用count()and case表达式来做到这一点。注意:case具有可选else子句;如果未使用,则默认else“值”为null。Count只计算非空值,因此您可以结合使用这些观察结果以编写紧凑的代码。计数无关紧要;因此case表达式可能返回一个数字(通常是1,但0仍然有效,并且会得到相同的结果,因为值是COUNTED而不是SUMMED)-但您也可以在其中输入'x'或日期中的日期案例表达。只是为了说明这一点,我将使用一个字符串。

select count( case when col > 16 and col < 25 then 'x' end ) as ct from your_table;
Run Code Online (Sandbox Code Playgroud)

your_table是表col的名称,是包含值的的名称,并且ct是结果列的名称(满足您条件的值的计数的标签)。

当然,在数据库中,您可以更轻松地获得相同的结果:

select count(*) as ct from your_table where col > 16 and col < 25;
Run Code Online (Sandbox Code Playgroud)

但是请注意,这些值位于一列中。

相反,如果您有一个包含四个列和许多行的表,并且所有列中的所有值都是数字,并且您想添加一列以显示严格地在每行16到25之间有多少个值,则解决方案是不同的(但是它使用相同的想法):

select col1, col2, col3, col4, 
       case when col1 > 16 and col1 < 25 then 1 else 0 end +
       case when col2 > 16 and col2 < 25 then 1 else 0 end +
       case when col3 > 16 and col3 < 25 then 1 else 0 end +
       case when col4 > 16 and col4 < 25 then 1 else 0 end    as ct
from   my_table;
Run Code Online (Sandbox Code Playgroud)