В документации Oracle указано, что:
Все агрегатные функции, кроме
COUNT (*) и GROUPING игнорируют нули.
Вы можете использовать функцию NVL в
аргумент для агрегатной функции
подставьте значение для нуля.
В качестве примера, используя схему Скотта:
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.
Вы можете видеть, что столбец Comm имеет 4 известных значения (т. Е. Не ноль) и 10 неизвестных значений (т. Е. Ноль)
Поскольку count(your_column_name)
игнорирует значения NULL, вам необходимо заменить неизвестные значения тем, к чему вы можете обратиться. Это может быть достигнуто с помощью функции 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
Я использовал значение «-1» в качестве «псевдонима» для моих нулевых значений, потому что я знаю, что «-1» не является существующим значением в столбце связи.
EDIT:
Следуя совету Роба. Можно удалить предложение where из приведенного выше примера и использовать функцию NVL2 , как показано ниже:
SQL> select count(nvl2(comm,null,-1)) "number of null values"
2 from emp
3 /
number of null values
---------------------
10