您可以使用count()和case表达式执行此操作.注意:case有一个可选的else子句;如果未使用,则默认的“值”为空. Count只计算非空值,因此您可以组合这些观察值来编写紧凑的代码.什么算不重要;所以case表达式可以返回一个数字(通常是1,但0也是有效的,并且会得到相同的结果,因为值是COUNTED,而不是SUMMED) – 但是你也可以有一个像’x’这样的字符串或者一个日期在案例表达中.为了说明这一点,我将使用一个字符串.

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

这里your_table是表的名称,col是包含值的列的名称,ct是结果列的名称(满足条件的值计数的标签).

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

select count(*) as ct from your_table where col > 16 and col < 25;

但请注意,值在一列中.

相反,如果您有一个包含四个COLUMNS和多行的表,并且所有列中的所有值都是数字,并且您想要添加一列显示在每个行中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;

更多推荐

oracle if 输出结果,sql – 如何在Oracle中执行countIf()