Проверяет понимание ограничений SQL при использовании GROUP BY и правил выбора колонок в SELECT.
Когда вы используете GROUP BY, SQL разбивает строки на группы по указанным колонкам. В SELECT можно выводить только те колонки, которые перечислены в GROUP BY, либо агрегатные функции (SUM, COUNT, AVG и т.д.), применяемые к остальным колонкам. Это требование стандарта SQL, чтобы результат был однозначным.
Представьте таблицу продаж с колонками product и price. Если сгруппировать по product, в каждой группе будет несколько цен. Какую из них показать? Без агрегации выбор произволен. Поэтому стандарт запрещает такие запросы.
-- Ошибка в стандартном SQL
SELECT product, price
FROM sales
GROUP BY product;MySQL и SQLite позволяют такие запросы, но возвращают случайное значение из группы. Это может привести к ошибкам в логике. В PostgreSQL, Oracle, MSSQL такой запрос вызовет ошибку.
-- Работает в MySQL, но не в PostgreSQL
SELECT product, price
FROM sales
GROUP BY product;Чтобы получить корректный результат, либо добавьте колонку в GROUP BY, либо используйте агрегатную функцию.
-- Вариант 1: добавить в GROUP BY
SELECT product, price
FROM sales
GROUP BY product, price;
-- Вариант 2: агрегация
SELECT product, MAX(price) AS max_price
FROM sales
GROUP BY product;Всегда следуйте стандарту: в SELECT при GROUP BY используйте только группируемые колонки и агрегаты. Это гарантирует предсказуемость и переносимость запросов между СУБД.