2.1Kпросмотров
16 февраля 2026 г.
Score: 2.4K
Очередные вопросы по 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 🐧