Что вернёт запрос SELECT region, category, COUNT(*) FROM sales GROUP BY ROLLUP(region, category)?
AТолько строки по парам
region и category без подытогов и общего итога: итоги нужно считать отдельным UNION ALLBСтроки по каждой
category с NULL в столбце region и общий итог: разбивка по отдельным регионам отсутствуетCДекартово произведение
region и category с COUNT(*) в каждой ячейке независимо от наличия данныхDСтроки по парам
region и category, подытоги по регионам с NULL в category и общий итог с NULL в обоих столбцахПравильный ответ.
ROLLUP(a, b) генерирует три уровня группировки: (a, b), (a) и (). Строки с итогами помечаются NULL в соответствующих столбцах.Разбор
GROUP BY ROLLUP(region, category) генерирует группировки (region, category), (region) и (). Для таблицы продаж получаем подсчёт по каждой паре регион-категория, подытог по каждому региону с NULL вместо category, и общий итог с NULL в обоих столбцах. Функция GROUPING(col) позволяет отличить синтетический NULL в строке итога от реального NULL в исходных данных.
Проверь себя · 1/3разбор после ответа
В таблице пользователей есть колонка
middle_name, в которой часто хранится NULL. Что вернёт выражение COUNT(middle_name)?Ещё вопросы по теме «Агрегация, 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» →