Таблица sales содержит 2 уникальных region и 2 уникальных channel. Сколько максимум строк вернёт SELECT region, channel, SUM(revenue) FROM sales GROUP BY CUBE(region, channel)?
A4 строки:
CUBE — это синоним ROLLUP, оба создают только иерархические подытогиB9 строк:
CUBE генерирует строки для всех подмножеств полей, включая каждую пару, каждое поле отдельно и общий итогC5 строк:
CUBE создаёт подытоги только по первому полю и общий итог без второгоD3 строки:
CUBE группирует только по отдельным полям без их совместной комбинацииПравильный ответ.
CUBE(a, b) генерирует все 4 подмножества: (a,b), (a), (b), (). При 2 регионах и 2 каналах: 4+2+2+1=9 строк.Разбор
CUBE(a, b) создаёт группировки для всех 2^n подмножеств полей: (a, b), (a), (b), (). При 2 регионах и 2 каналах: 4 пары + 2 строки по региону + 2 строки по каналу + 1 общий итог = 9. ROLLUP(a, b) генерирует только (a, b), (a), () — 4+2+1=7 строк, без (b). CUBE перебирает все возможные комбинации, ROLLUP идёт иерархически от правого к левому.
Проверь себя · 1/3разбор после ответа
Что делает оператор
DISTINCT?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT`?
- Что делает `HAVING`?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице `users` есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →