mdm*_*dma 18
我特别不了解Oracle,但ANSI SQL COUNT(rowName)
不会计算NULL
值,但COUNT(*)
确实如此.所以你可以写
SELECT COUNT(*) FROM YourTable WHERE YourColumn IS NULL
Run Code Online (Sandbox Code Playgroud)
它计算YourTable中将YourColumn设置为NULL的行.
Gar*_*ers 10
作为mdma响应的替代方案.如果您不想在可能的位置放置过滤器
SELECT COUNT(case when xxx IS NULL THEN 1 end) cnt_xxx_null
FROM table
Run Code Online (Sandbox Code Playgroud)
Oracle 文档声明:
除COUNT(*)和GROUPING之外的所有聚合函数都忽略空值.您可以在聚合函数的参数中使用NVL函数来将值替换为null.
例如,使用scott模式:
SQL> select empno, sal, comm
2 from emp;
EMPNO SAL COMM
---------- ---------- ----------
7369 800
7499 1600 300
7521 1250 500
7566 2975
7654 1250 1400
7698 2850
7782 2450
7788 3000
7839 5000
7844 1500 0
7876 1100
7900 950
7902 3000
7934 1300
14 rows selected.
Run Code Online (Sandbox Code Playgroud)
您可以看到Comm列有4个已知值(即非null)和10个未知值(即Null)
由于count(your_column_name)
忽略空值,您需要将未知值替换为您可以引用的内容.这可以使用NVL功能来实现.
SQL> select count(nvl(comm, -1)) "number of null values"
2 from emp
3 where nvl(comm, -1) = -1;
number of null values
---------------------
10
Run Code Online (Sandbox Code Playgroud)
我使用值"-1"作为空值的"别名",因为我知道"-1"不是comm列中的现有值.
编辑:
遵循Rob的建议.可以从上面的示例中删除where子句并使用NVL2函数,如下所示:
SQL> select count(nvl2(comm,null,-1)) "number of null values"
2 from emp
3 /
number of null values
---------------------
10
Run Code Online (Sandbox Code Playgroud)