Задать вопрос

Почему GROUP BY работает?

Согласно вики(и не только) код представленный ниже не должен работать, но он работает. Почему?
SELECT title, genre, MAX(checkouts) FROM library_books
GROUP BY genre;

Проверял тут
В MySQL отрабатывает не корректно, но тоже без ошибки.
  • Вопрос задан
  • 207 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
BuriK666
@BuriK666
Компьютерный псих
в PostgreSQL работать не будет
ERROR: column "library_books.title" must appear in the GROUP BY clause or be used in an aggregate function


То что работает, это причуды СУБД
Ответ написан
Комментировать
pi314
@pi314
Президент Солнечной системы и окрестностей
Есть разница между "работает" и "выдаёт детерминированный результат". В данном примере ни разу не очевидно, какой именно результат можно ожидать в полях, которые не агрегированы и по которым не происходит группировки. Кто-то решит втулить туда значение из первой записи, попавшей в группировку, кто-то - из последней, кто-то вообще решит включать в результат только группы с идентичным значением этого поля... короче, вариантов море, и все неочевидны, и не определены стандартом. В нормально спроектированных системах в таких случаях принято выбирать наиболее очевидный вариант, т.е. выдавать ошибку. Можно, конечно, поступать иначе, но полагаться на такую систему - было бы как минимум стремно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@halenharper
Почему не должен работать?
Должен, просто какой результат ожидаете.
Ответ от базы получен, но в указанном примере, значения склеились в одну строку (сгруппировались).
('first', 'comedy', 5),
('second', 'comedy', 7),

и в итоге получили в результате выборки 2 результата. Без группировки получили бы 3
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы