Как я могу считать только нулевые значения в Oracle / PLSQL?

Как я могу считать только нулевые значения в Oracle / PLSQL?

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

7 ответов


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

SELECT COUNT(*) FROM YourTable WHERE YourColumn IS NULL

который подсчитывает строки в YourTable, которые имеют YourColumn равным NULL.


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

SELECT COUNT(case when xxx IS NULL THEN 1 end) cnt_xxx_null
FROM table

Оракул документация гласит:

все агрегатные функции, за исключением COUNT (*) и группировка игнорируют нули. Вы можете использовать функцию NVL в аргументом агрегатной функции замените значение null.

в качестве примера, используя схему Скотта:

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 известных значения (т. е. не null) и 10 неизвестных значений (т. е. Null)

As count(your_column_name) игнорирует нули, которые вам нужно заменить неизвестными значениями для чего-то, на что вы можете ссылаться. Это может быть достигнуто с помощью NVL


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

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

SELECT COUNT(COALESCE( _COLUMN, 1)) AS CNT FROM _TABLE

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

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

все должно быть равно nulls + notnulls


select count(nvl(values, 0)) from emp where values is null;

функция:

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