Выбор ответа Junior GROUP BY и агрегаты обновлено
SUM на пустом наборе
Вопрос
В таблице payments нет ни одной строки с user_id = 42. Что вернёт запрос?
SELECT SUM(amount) FROM payments WHERE user_id = 42;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Одну строку: NULL. Агрегат без GROUP BY всегда возвращает ровно одну строку.
Варианты ответа
- Одну строку: 0
- Ноль строк, пусто
- Одну строку: NULLправильный ответ
- Ошибку деления
Разбор
Агрегат без GROUP BY всегда возвращает ровно одну строку. На пустом наборе SUM (как и AVG, MIN, MAX) даёт NULL, и только COUNT даёт 0. Поэтому в коде пишут COALESCE(SUM(amount), 0). Ноль строк было бы при GROUP BY user_id: пустых групп не бывает. Ошибки нет: SUM ничего не делит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.