«column must appear in the GROUP BY clause or be used in an aggregate function» — отличие MySQL GROUP BY от PostgeSQL

Человек, привишкий к работе с MySQL, неизбежно столкнется с этой ошибкой

Дело в том, что MySQL, в отличие от PostgreSQL разрешает неканонический GROUP BY: без перечисления всех столбцов, по которым идет группировка, при этом объединяя негруппируемые столбцы произвольным образом. Postgre не допускает такой вольности, так как канонический SQL требует перечисления всех столбцов, по которым будет произведена группировка

ПРИМЕР:

Имеем запрос такого вида:

SELECT id, name, date, album_id FROM tracks

MySQL:

SELECT *, COUNT(id) FROM tracks
GROUP BY album_id

PostgreSQL:

SELECT *, COUNT(id) FROM tracks
GROUP BY album_id, name, date
SELECT album_id, COUNT(id) FROM tracks
GROUP BY album_id

Как видно из примера, либо столбец не участвует в выборке, либо мы обязаны группировать по нему

Оставить комментарий