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

AROLLUP(city, product) — даёт нужные три уровня через иерархическую свёртку
BCUBE(city, product) — перебирает все подмножества и включает нужные уровни
CОбычный GROUP BY city, product с двумя отдельными UNION ALL-блоками для итогов
DGROUPING 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разбор после ответа
Что делает HAVING?
Тренировать SQL в Telegram

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