Нужно одним запросом получить итоги отдельно по каждому городу, отдельно по каждому продукту и общий итог — три уровня без их совместной комбинации. Какое выражение даёт ровно эти три уровня?

AGROUP BY ROLLUP(city, product) иерархически от пары столбцов вниз до общего итога одной свёрткой
BGROUP BY CUBE(city, product) по всем подмножествам столбцов, включая совместную пару (city, product)
CGROUP BY city, product UNION ALL отдельные блоки с итогами по каждому из столбцов и общим
DGROUP BY GROUPING SETS((city), (product), ()) явный список из трёх уровней группировки
Правильный ответ. GROUP BY GROUPING SETS((city),(product),()) явно перечисляет три нужных уровня: по городу, по продукту и общий итог.

Разбор

GROUPING SETS позволяет задать точный список комбинаций группировки. ROLLUP(city, product) генерирует (city, product), (city), () — три уровня с лишней совместной комбинацией. CUBE(city, product) генерирует все четыре: (city,product), (city), (product), () — с лишней парой. GROUPING SETS((city),(product),()) — единственный точный способ получить ровно нужные три уровня без лишних строк.

Проверь себя · 1/3разбор после ответа
Что вернёт запрос SELECT AVG(salary) FROM employees;?
Тренировать SQL в Telegram

Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»