如何计算sql中包含非零值的行

Posted

技术标签:

【中文标题】如何计算sql中包含非零值的行【英文标题】:How to count the rows which contains non zero values in sql 【发布时间】:2013-02-11 14:31:11 【问题描述】:
SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
  FROM table;

字段 dmd_1wk 中有很多零。如何计算非零值?

【问题讨论】:

COUNT() 返回一个整数。那么 ROUND() 的意义何在? 【参考方案1】:

听起来你只需要添加一个WHERE 子句:

SELECT 
      round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table
WHERE dmd_1wk <> 0;

如果您想要同时计算非零值和零值,那么您可以使用类似:

SELECT 
   round(COUNT(case when dmd_1wk <> 0 then dmd_1wk end),2) AS NBR_ITEMS_1WK_NonZero,
   round(COUNT(case when dmd_1wk = 0 then dmd_1wk end),2) AS NBR_ITEMS_1WK_Zero
FROM table;

【讨论】:

【参考方案2】:

方法一:案例陈述。如果您需要继续处理所有行(where 子句会阻止),这可能很有用。

 SELECT count(case when dmd_1wk = 0 then 0 else 1 end) as NonZeroCount FROM MyTable

方法二:Where子句。

 SELECT
   count(1) as NonZeroCount
 FROM
   MyTable
 WHERE
  dmd_1wk <> 0

【讨论】:

没错。 where 子句将处理更少的行。 case 语句方法将处理所有行。这两个选项都可能有用,具体取决于您的其他应用程序需求【参考方案3】:

我想使用 NULLIF 提供另一个解决方案,因为 COUNT 不会计算 NULL 值:

SELECT round(COUNT(NULLIF(dmd_1wk,0)),2) AS NBR_ITEMS_1WK
FROM table;

这里是Fiddle。

祝你好运。

【讨论】:

【参考方案4】:

Methinks bluefeets 的答案可能是您真正想要的,因为听起来您只想计算非零;但如果不是这种情况,这将为您提供零和非零项目的计数:

SELECT 
  ROUND(SUM(CASE NVL(dmd_1wk, 0) = 0 THEN 1 ELSE 0 END), 2) AS "Zeros",
  ROUND(SUM(CASE NVL(dmd_1wk, 0) != 0 THEN 1 ELSE 0 END), 2) AS "NonZeros"
FROM table

虽然对整数进行四舍五入没有意义,但我已经包含了您的原始 ROUND,因为我猜您正在使用它进行格式化,但您可能想要使用:

TO_CHAR(SUM(...), '999.00')

因为这是格式化数字的预期功能。

【讨论】:

【参考方案5】:

您可以过滤它们。

SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table
WHERE dmd_1wk <> 0;

【讨论】:

以上是关于如何计算sql中包含非零值的行的主要内容,如果未能解决你的问题,请参考以下文章

TSQL - 列中所有非零值的平均值

MPAndroidChart如何让y轴以非零值开始?

仅评估 tf.Tensor 的非零值

英特尔 SIMD - 如何检查 __m256* 是不是包含任何非零值

在 TensorFlow 中,如何使用 python 从张量中获取非零值及其索引?

编译器是不是应该正确地将 bool 中的任意非零值解释为 true?