Как я могу считать только нулевые значения в 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
функция:
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