Очередные вопросы по SQL с собеседования
Очередные вопросы по SQL с собеседования
Итак, дана таблица с одним полем flag
CREATE TABLE sandbox.test (flag integer);
INSERT INTO sandbox.test (flag) VALUES
(0), (1), (2), (3), (4), (5), (null), (null);
Давайте закрепим популярные вопросы про count
• select count(*) from sandbox.test;
-- Результат
8
• select count(1) from sandbox.test;
-- Результат
8
• select count(0) from sandbox.test;
-- Результат
8
• select count(null) from sandbox.test;
-- Результат
0
• select count(flag) from sandbox.test;
-- Результат
6
• select count('flag') from sandbox.test;
-- Результат
8
Объяснение почему так:
• COUNT(*) считает количество строк в таблице
• COUNT(1) и COUNT(0) - то же самое: 1 и 0 здесь просто
константы
, они не NULL, поэтому каждая строка учитывается
• COUNT(flag) - считает только не NULL значения в колонке flag.
• COUNT(NULL) - всегда 0, потому что NULL - это отсутствие значения. Еще раз, COUNT никогда не возвращает null
Вопросы про count популярны на собесах. А вот про функцию sum более редкие. И меня один кейс удивил..
• select sum(*) from sandbox.test;
--
Ошибка!
• select sum(flag) from sandbox.test;
-- Результат
15
• select sum(0) from sandbox.test;
-- Результат
0
• select sum(1) from sandbox.test;
-- Результат
8
• select sum(2) from sandbox.test;
-- Результат
16
• select sum(4) from sandbox.test;
-- Результат
32
Почему SUM(*)
-
ошибка?
Потому что * означает «все колонки». А как сложить строку с числом? Или дату с текстом? База данных справедливо говорит: «Я не умею складывать всё подряд, дай конкретную колонку».
SUM(flag) = 15
-
логично
Складываем числа: 0+1+2+3+4+5 = 15. NULL игнорируются (не участвуют в сумме).
А теперь самое неочевидное - SUM(1), SUM(2), SUM(4)
Многие думают: SUM(1) должен вернуть 1. Но нет!
Давайте представим, как база данных выполняет этот запрос:
Берем таблицу из 8 строк
Для каждой строки вычисляем выражение в скобках:
Для SUM(1) → значение 1 в каждой строке
Для SUM(2) → значение 2 в каждой строке
Для SUM(4) → значение 4 в каждой строке
Складываем все эти значения
Получается:
SUM(0) = 0+0+0+0+0+0+0+0 = 0 (тут логично)
SUM(1) = 1+1+1+1+1+1+1+1 = 8 (количество строк)
SUM(2) = 2+2+2+2+2+2+2+2 = 16 (2 × 8 строк)
SUM(4) = 4+4+4+4+4+4+4+4 = 32 (4 × 8 строк)
SUM(константа)
работает как умножение константы на количество строк в выборке.
И да, количество полей в таблице никак не влияет на результат. Даже если в таблице 100 колонок, SUM(2) всё равно вернет 16. Главное - сколько строк попало в выборку.
Честно говоря, я такие вопросы на собесах оч не люблю. Какой от них практический смысл я хз. Кто хоть раз писал count(0) или sum(4). Но раз такое часто спрашивают на собесах, то нужно быть готовым
🤝
Интересно, сколько людей ответили правильно на всё?
Ставь
✅
если на все ответил правильно
И ставь
❌
если допустил хотя б одну ошибку.
it пингвин | data engineer
🐧
Откликнуться в Telegram →
⚠️ Никогда не платите «за оформление» или «гарантию трудоустройства» — это признак мошенников. Работа ТРУ не несёт ответственности за содержание вакансии.