Выбор ответа Junior GROUP BY и агрегаты спрашивают часто обновлено

Колонка не из GROUP BY

Вопрос

Что произойдёт в PostgreSQL? (id первичный ключ customers.)

SELECT city, name, COUNT(*)
FROM customers
GROUP BY city;

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

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

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

Коротко

Правильный ответ: Ошибка: name должна быть в GROUP BY или в агрегате. В группе по городу несколько клиентов, и база не знает, чьё имя показать, поэтому запрос отклоняется.

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

  1. Ошибка: name должна быть в GROUP BY или в агрегатеправильный ответ
  2. По одной строке на город с первым по алфавиту именем
  3. По одной строке на город со случайным именем из группы
  4. По строке на каждого клиента, раз id первичный ключ

Разбор

В группе по городу несколько клиентов, и база не знает, чьё имя показать, поэтому запрос отклоняется. Старый MySQL без ONLY_FULL_GROUP_BY брал произвольное значение, отсюда миф о «случайном имени». Исключение в PostgreSQL: если сгруппировать по первичному ключу (GROUP BY id), остальные колонки этой таблицы выводить можно, они однозначно определены.

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

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

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