SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table;
字段dmd_1wk中有很多零。如何计算非零值?
答案 0 :(得分: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;
答案 1 :(得分:1)
方法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
答案 2 :(得分:1)
我想使用NULLIF
提供另一种解决方案,因为COUNT
不会计算NULL值:
SELECT round(COUNT(NULLIF(dmd_1wk,0)),2) AS NBR_ITEMS_1WK
FROM table;
这是Fiddle。
祝你好运。答案 3 :(得分:0)
您可以过滤它们。
SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table
WHERE dmd_1wk <> 0;
答案 4 :(得分: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')
因为这是格式化数字的预期功能。