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

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

4

5 回答 5

5

听起来您只需要添加一个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;
于 2013-02-11T14:32:54.697 回答
1

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

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

方法 2:Where 子句。

 SELECT
   count(1) as NonZeroCount
 FROM
   MyTable
 WHERE
  dmd_1wk <> 0
于 2013-02-11T14:32:53.273 回答
1

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

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

这是小提琴

祝你好运。

于 2013-02-11T14:45:19.960 回答
0

您可以过滤它们。

SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table
WHERE dmd_1wk <> 0;
于 2013-02-11T14:33:29.377 回答
0

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

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')

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

于 2013-02-11T14:43:42.483 回答