Нужно одним запросом получить итоги отдельно по каждому городу, отдельно по каждому продукту и общий итог — три уровня без их совместной комбинации. Какое выражение даёт ровно эти три уровня?
A
GROUP BY ROLLUP(city, product) иерархически от пары столбцов вниз до общего итога одной свёрткойB
GROUP BY CUBE(city, product) по всем подмножествам столбцов, включая совместную пару (city, product)C
GROUP BY city, product UNION ALL отдельные блоки с итогами по каждому из столбцов и общимD
GROUP 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;?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT` в `SELECT`-запросе?
- Что делает оператор `HAVING` в SQL-запросе с группировкой?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице пользователей есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →