Вопрос в том, почему вы думаете, что group by
будет работать с select *
.
Что делает group by
, так это создает одну строку для каждой комбинации значений для ключей group by
. Это по определению. Несколько строк становятся одной.
Допустимые выражения в select
:
- Группа по клавишам или выражениям, содержащим только эти ключи.
- Суммарные функции на других значениях.
- Комбинации сводных функций с группировкой по клавишам.
Любой столбец в select
, которого нет в group by
, может иметь несколько значения среди исходной строки. SQL не позволяет этого. Большинство баз данных не позволяют этого. MySQL больше не позволяет это по умолчанию.
Когда-то это было так, но возвращаемые значения были из неопределенных совпадающих строк. Эта «функциональность» (на самом деле ошибка) теперь исправлена.
Примечание: есть исключение из этого - разрешенное стандартом - которое позволяет агрегировать по первичным ключам / уникальным ключам, а затем выбирать остальные колонн. Это допустимо, потому что первичный ключ однозначно определяет остальные значения столбца.