Oracle: как считать нулевые и ненулевые строки
У меня есть таблица с двумя столбцами, которая может быть null
(а также некоторые другие столбцы). Я хотел бы подсчитать, сколько строк имеет столбец a, b, оба и ни один из столбцов не имеют значения null.
Возможно ли это с Oracle в одном запросе? Или мне нужно создать один запрос для каждого? Не можете использовать group by
или некоторые другие вещи, о которых я, возможно, не знаю, например?
Ответы
Ответ 1
COUNT(expr)
будет подсчитывать количество строк, в которых expr
не является нулевым, поэтому вы можете подсчитать количество нулей с такими выражениями:
SELECT count(a) nb_a_not_null,
count(b) nb_b_not_null,
count(*) - count(a) nb_a_null,
count(*) - count(b) nb_b_null,
count(case when a is not null and b is not null then 1 end)nb_a_b_not_null
count(case when a is null and b is null then 1 end) nb_a_and_b_null
FROM my_table
Ответ 2
Что-то вроде этого:
SELECT sum(case
when a is null and b is null then 1
else 0
end) as both_null_count,
sum(case
when a is null and b is not null then 1
else 0
end) as only_a_is_null_count
FROM your_table
Вы можете расширить это для других комбинаций null/not null
Ответ 3
select sum(decode(a,null,0,1)) as "NotNullCount", sum(decode(a,null,1,0)) as "NullCount"
from myTable;
Повторяйте столько полей, сколько хотите.
Ответ 4
Один из способов сделать это:
select count(*) from table group by nvl2(a, 0, 1), nvl2(b, 0, 1) having nvl2(a,0,1) = nvl2(b,0,1);
Ответ 5
Это сработало для меня для подсчета общего количества пустых ячеек в группе столбцов в таблице в оракуле: я добавил триммер, чтобы считать пустые пространства как null
SELECT (sum(case
when trim(a) is null Then 1
else 0
end)) +
(sum(case
when trim(b) is null
else 0
end)) +
(sum(case
when trim(c) is null
else 0
end)) as NullCount
FROM your_table
Надеюсь, что это поможет
Приветствия.
Ответ 6
Это можно сделать в Oracle только в 1 строке:
SELECT COUNT(NVL(potential_null_column, 0)) FROM table;
Функция NVL проверяет, является ли первый аргумент нулевым и рассматривает его как значение из второго аргумента.