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

方法 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

NULL 値をカウントしないNULLIFため、別のソリューションを提供したいと思います。COUNT

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

そして、ここにFiddleがあります。

幸運を。

于 2013-02-11T14:45:19.960 に答える
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 に答える
0

それらをフィルタリングできます。

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