SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table;
フィールドdmd_1wkには、非常に多くのゼロが含まれています。ゼロ以外の値をカウントするにはどうすればよいですか?
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 : ケース ステートメント。これは、すべての行の処理を続行する必要がある場合に役立ちます (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
NULL 値をカウントしないNULLIF
ため、別のソリューションを提供したいと思います。COUNT
SELECT round(COUNT(NULLIF(dmd_1wk,0)),2) AS NBR_ITEMS_1WK
FROM table;
そして、ここにFiddleがあります。
幸運を。
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')
これは、数値をフォーマットするための目的の関数です。
それらをフィルタリングできます。
SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table
WHERE dmd_1wk <> 0;