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

如何计算sql中包含非零值的行数,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,字段dmd_1wk中有很多零。如何计算非零值?方法1:Case语句。如果需要继续处理where子句将阻止的所有行,这可能很有用 SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK FROM table; 方法2:Where子句 SELECT count(case when dmd_1wk = 0 then 0 else 1 end) as NonZeroCount FROM MyTable 听起来您只需要添加WHERE子句: 如果需要非零值和

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

方法1:Case语句。如果需要继续处理where子句将阻止的所有行,这可能很有用

SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
  FROM table;
方法2:Where子句

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

听起来您只需要添加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;
我认为他的答案可能是你真正想要的,因为听起来你只是想计算非零;但如果不是这样的话,这将得到零项和非零项的计数:

SELECT round(COUNT(dmd_1wk),2) AS NBR_ITEMS_1WK
FROM table
WHERE dmd_1wk <> 0;
虽然整数四舍五入没有意义,但我已经包含了您的原始四舍五入,因为我猜您正在使用它进行格式设置,但您可能希望使用:

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

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

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

TO_CHAR(SUM(...), '999.00')
这是我的答案


祝你好运。

没错。where子句将处理更少的行。case语句方法将处理所有行。这两个选项可能都很有用,具体取决于您的其他应用程序需要Count返回一个整数。那么圆形的意义是什么呢?
TO_CHAR(SUM(...), '999.00')
SELECT round(COUNT(NULLIF(dmd_1wk,0)),2) AS NBR_ITEMS_1WK
FROM table;