Выбор ответа Junior GROUP BY и агрегаты обновлено

SUM на пустом наборе

Вопрос

В таблице payments нет ни одной строки с user_id = 42. Что вернёт запрос?

SELECT SUM(amount) FROM payments WHERE user_id = 42;

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Одну строку: NULL. Агрегат без GROUP BY всегда возвращает ровно одну строку.

Варианты ответа

  1. Одну строку: 0
  2. Ноль строк, пусто
  3. Одну строку: NULLправильный ответ
  4. Ошибку деления

Разбор

Агрегат без GROUP BY всегда возвращает ровно одну строку. На пустом наборе SUM (как и AVG, MIN, MAX) даёт NULL, и только COUNT даёт 0. Поэтому в коде пишут COALESCE(SUM(amount), 0). Ноль строк было бы при GROUP BY user_id: пустых групп не бывает. Ошибки нет: SUM ничего не делит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме