如何在 Oracle 中执行 countIf()

新手上路,请多包涵

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

 COUNTIFS(A1:D1,"<25", A1:D1, ">16")?

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

原文由 amsbam1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

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

 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;

但请注意,这些值在一列中。

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

原文由 user5683823 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 case 在 SQL 查询中执行此操作:

 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;

原文由 Gordon Linoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进