Что вернут COUNT, MIN, MAX, SUM и AVG для столбца с NULL?

В таблице один столбец id и семь строк:

Короткий ответ

Что ответить на собеседовании

В таблице один столбец id и семь строк:

Подробный разбор

Ответ с пояснениями

Условие

В таблице один столбец id и семь строк:

id
----
1
2
3
4
5
NULL
NULL

Нужно определить результаты агрегатов без WHERE и GROUP BY. Рассмотрим PostgreSQL и числовой тип id.

Выражение Результат Причина
COUNT(*) 7 Считает все строки
COUNT(1) 7 Константа 1 не NULL в каждой строке
COUNT(id) 5 Считает ненулевые значения столбца
COUNT("id") 5 Это тот же столбец с quoted identifier
COUNT(NULL) 0 Выражение всегда NULL
MIN(id) 1 Минимум среди ненулевых значений
MAX(id) 5 Максимум среди ненулевых значений
SUM(id) 15 Сумма 1 + 2 + 3 + 4 + 5
AVG(id) 3 15 / 5, а не 15 / 7

NULL не заменяется нулём. Агрегаты MIN, MAX, SUM, AVG пропускают такие значения. Агрегатные функции PostgreSQL

Воспроизводимый запрос

WITH sample(id) AS (
  VALUES (1), (2), (3), (4), (5), (NULL), (NULL)
)
SELECT count(*) AS all_rows,
       count(1) AS constant_values,
       count(id) AS known_ids,
       count("id") AS quoted_ids,
       count(NULL) AS null_values,
       min(id), max(id), sum(id), avg(id)
FROM sample;

В PostgreSQL двойные кавычки ограничивают идентификатор, одинарные — строковый литерал. Поэтому COUNT('id') даст 7, а COUNT("id") — 5. Для другой СУБД нужно уточнить правила кавычек и её режим. Лексическая структура SQL

На пустом входе перечисленные COUNT вернут 0, а MIN, MAX, SUM и AVG — NULL. Подмена через COALESCE должна соответствовать смыслу задачи.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку