В таблице один столбец id и семь строк:
Что вернут COUNT, MIN, MAX, SUM и AVG для столбца с NULL?
В таблице один столбец 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 должна соответствовать смыслу задачи.