Как я могу считать только значения NULL в Oracle / PLSQL? - PullRequest
9 голосов
/ 15 мая 2010

Как подсчитать только значения NULL в Oracle / PLSQL?

Я хочу считать только нулевые значения. Есть ли функция, которая делает это?

Ответы [ 7 ]

18 голосов
/ 16 мая 2010

Я не знаю Oracle конкретно, но ANSI SQL, COUNT(rowName) не учитывает NULL значений, а COUNT(*) делает. Так что вы можете написать

SELECT COUNT(*) FROM YourTable WHERE YourColumn IS NULL

, который считает строки в YourTable, для которых YourColumn установлено в NULL.

9 голосов
/ 17 мая 2010

Как альтернатива ответу mdma. Если вы не хотите помещать фильтр туда, где вы можете

SELECT COUNT(case when xxx IS NULL THEN 1 end) cnt_xxx_null
FROM table
6 голосов
/ 16 мая 2010

В документации 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
1 голос
/ 19 февраля 2015

Я мог бы попытаться инвертировать нуль, посмотреть результаты

SELECT
 COUNT(DECODE(YourField, null, 1, null)) Nulls,
 count(*) Everything,
 COUNT(YourField) NotNulls
FROM YourTable

Все должно равняться нулю + не ноль

1 голос
/ 28 июля 2012

Если вы хотите подсчитать и другие значения с помощью null , то использование функции COALESCE улучшит время выполнения

Различия Oracle между NVL и Coalesce

SELECT COUNT(COALESCE( _COLUMN, 1)) AS CNT FROM _TABLE
0 голосов
/ 27 марта 2018

Функция:

create or replace function xxhrs_fb_count_null
return number
as
l_count_null number;
begin
  select count(*) into l_count_null from emp where comm is null;
  return l_count_null;
end;

Использование:

select xxhrs_fb_count_null from dual
0 голосов
/ 29 августа 2016
select count(nvl(values, 0)) from emp where values is null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...