如何在 Oracle 中执行 countIf()
How to do countIf() in Oracle
如何 select 一个变量,它给出与 excel 函数相同的输出:
COUNTIFS(A1:D1,"<25", A1:D1, ">16")?
即计算我的四个字段中的值在 16 到 25 之间的次数。
您可以在 SQL 查询中使用 case
:
执行此操作
select sum(case when col between 16 and 25 then 1 else 0 end)
from t;
注意between
是包含在SQL中的,不是独占的,所以根据你的代码逻辑:
select sum(case when col > 16 and col < 25 then 1 else 0 end)
from t;
您可以使用 count()
和 case
表达式执行此操作。注意:case
有一个可选的 else
子句;如果不使用,则默认else
"value"为null
。 Count 只计算非空值,因此您可以结合这些观察结果来编写紧凑的代码。计算什么并不重要;所以 case
表达式可能 return 一个数字(1 是通常的,但 0 也同样有效并且会给出相同的结果,因为这些值是计算的,而不是求和的) - 但你也可以有一个'x' 之类的字符串或 case 表达式中的日期。为了说明这一点,我将使用一个字符串。
select count( case when col > 16 and col < 25 then 'x' end ) as ct from your_table;
此处 your_table
是您的 table 的名称,col
是包含值的 列的名称, ct
是结果列的名称(满足条件的值计数的标签)。
当然,在数据库中你可以更容易地得到相同的结果:
select count(*) as ct from your_table where col > 16 and col < 25;
不过请注意,这些值位于一列中。
如果您有一个包含四列和多行的 table,并且所有列中的所有值都是数字,并且您想添加一个列来显示有多少值严格介于 16 和 25 IN 之间每一行,解决方案都不同(但它使用相同的想法):
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;
想一想,你有一个 'user_table'
,其中一些用户的 'status' 是 active (code-11)
而其他人是 inactive (code-22)
.您可以使用下面的 sql
计算活跃和不活跃。
select count(case when status = 11 then 1 end) u_active, count(case when status = 22 then 1 end) u_inactive, from user_table;
如何 select 一个变量,它给出与 excel 函数相同的输出:
COUNTIFS(A1:D1,"<25", A1:D1, ">16")?
即计算我的四个字段中的值在 16 到 25 之间的次数。
您可以在 SQL 查询中使用 case
:
select sum(case when col between 16 and 25 then 1 else 0 end)
from t;
注意between
是包含在SQL中的,不是独占的,所以根据你的代码逻辑:
select sum(case when col > 16 and col < 25 then 1 else 0 end)
from t;
您可以使用 count()
和 case
表达式执行此操作。注意:case
有一个可选的 else
子句;如果不使用,则默认else
"value"为null
。 Count 只计算非空值,因此您可以结合这些观察结果来编写紧凑的代码。计算什么并不重要;所以 case
表达式可能 return 一个数字(1 是通常的,但 0 也同样有效并且会给出相同的结果,因为这些值是计算的,而不是求和的) - 但你也可以有一个'x' 之类的字符串或 case 表达式中的日期。为了说明这一点,我将使用一个字符串。
select count( case when col > 16 and col < 25 then 'x' end ) as ct from your_table;
此处 your_table
是您的 table 的名称,col
是包含值的 列的名称, ct
是结果列的名称(满足条件的值计数的标签)。
当然,在数据库中你可以更容易地得到相同的结果:
select count(*) as ct from your_table where col > 16 and col < 25;
不过请注意,这些值位于一列中。
如果您有一个包含四列和多行的 table,并且所有列中的所有值都是数字,并且您想添加一个列来显示有多少值严格介于 16 和 25 IN 之间每一行,解决方案都不同(但它使用相同的想法):
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;
想一想,你有一个 'user_table'
,其中一些用户的 'status' 是 active (code-11)
而其他人是 inactive (code-22)
.您可以使用下面的 sql
计算活跃和不活跃。
select count(case when status = 11 then 1 end) u_active, count(case when status = 22 then 1 end) u_inactive, from user_table;