Как я могу считать только Нулевые значения в Oracle/PLSQL?
Я хочу считать только нулевые значения. Существует ли функция, которая делает это?
Я не знаю Oracle конкретно, но ANSI SQL, COUNT(rowName)
не учитывает значения NULL
, но COUNT(*)
учитывает.Таким образом, вы можете написать
SELECT COUNT(*) FROM YourTable WHERE YourColumn IS NULL
, который подсчитывает строки в YourTable, для которых YourColumn имеет значение NULL.
Как альтернатива ответу mdma. Если вы не хотите ставить фильтр в where, вы можете
SELECT COUNT(case when xxx IS NULL THEN 1 end) cnt_xxx_null
FROM table
В документации 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 известных значения (т.е. Not null) и 10 неизвестных значений (т.е. Null)
As 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
Я использовал значение «-1» в качестве «псевдонима» для моих нулевых значений, потому что я знаю, что «-1» не является существующим значением в столбце comm.
РЕДАКТИРОВАТЬ:
По предложению Роба. Можно удалить предложение where из приведенного выше примера и использовать функцию NVL2 , как показано ниже:
SQL> select count(nvl2(comm,null,-1)) "number of null values"
2 from emp
3 /
number of null values
---------------------
10