Агрегатные функции и NULL

АГРЕГАТНЫЕ ФУНКЦИИ И NULL

Посмотрим, сколько уникальных названий магазинов присутствует в таблице:

select
    distinct storename
from 
    supermarket_inventory

Результат: 35.

Стоит обратить внимание на то, что одно из уникальных значений NULL. Теперь выполним запрос для подсчета количества уникальных значений, как итога, через функцию COUNT():

select
    count(distinct storename)
from 
    supermarket_inventory

Результат: 34.

Из вышесказанного можно сделать вывод, что функция COUNT() не применяется к значениям NULL. Это верно, но есть одно уточнение: функция count, когда в нее передан столбец, действительно не работает с NULL. Однако, если выполнить запросы:

select
    *
from 
    supermarket_inventory
select
    count(*)
from 
    supermarket_inventory

То в обоих результатах мы получим 1 000 срок в таблице, включая одну с null.

Таким образом, правило гласит: агрегатные функции применяются для значений, не равных NULL. Исключением является функция COUNT(*).

Давайте посчитаем количество уникальных значений в столбце storename вместе с null значениями:

select
    sum(distinct case when storename is null then 1 end) + count(distinct storename) as result
from 
    supermarket_inventory

Результат: 35.