Раздел group by cube
Наконец, заметим, что, в отличие от запросов с традиционной группировкой, результат запроса, содержащего раздел GROUP BY ROLLUP, зависит от порядка столбцов в списке группировки. При выполнении запроса происходит движение по этому списку слева направо с повышением уровня детальности результирующих данных. Существует еще одна разновидность запроса с группировкой, основанная на использовании раздела GROUP BY CUBE.
Пусть раздел группировки запроса имеет вид GROUP BY CUBE (cname1, cname2, ... , cnamen), где cnamei (i = 1, 2, ... , n) - имя столбца таблицы-результата раздела FROM запроса. Обозначим через SGBC множество {cname1, cname2, ... , cnamen}. Пусть Si является произвольным подмножеством SGBC, т.е. Si представляет собой пустое множество или имеет вид {cnamei1, cnamei2, ... , cnameim}, где mn, и каждое имя столбца cnameij совпадает с одним и только одним именем столбца из списка столбцов раздела GROUP BY CUBE. Очевидно, что у множества SGBC существует 2n подмножеств различных вида Si. Тогда по определению результат этого запроса совпадает с объединением результатов 2n запросов с теми же разделами SELECT, FROM и WHERE, что и у запроса с GROUP BY CUBE, и с разделом группировки вида GROUP BY Si, причем во всех строках результата частичного запроса значением любого столбца cnamej такого, что cnamej SGBC и cnamej Si, является NULL. Запрос с разделом группировки вида GROUP BY S, где S - пустое множество, трактуется как запрос без раздела GROUP BY. Вот пример запроса, содержащего раздел GROUP BY CUBE.
SELECT DEPT_NO, EMP_BDATE, MAX (EMP_SAL)AS MAX_SAL,
GROUPING (DEPT_NO) AS GDN, GROUPING (EMP_BDATE) AS GEB
FROM EMP
GROUP BY CUBE (DEPT_NO, EMP_BDATE);
Пример 16.2. Найти максимальный размер зарплаты во всем предприятии, максимальный размер зарплаты в каждом отделе, максимальный размер зарплаты сотрудников в каждой возрастной категории и максимальный размер зарплаты сотрудников каждой возрастной категории каждого отдела. (html, txt)
Результирующая таблица для этого запроса будет иметь следующий вид:
Рис. 16.4. Результат запроса с разделом GROUP BY CUBE и вызовами агрегатной функции GROUPING к таблице с неопределенными значениями столбцов группировки
Как видно, результат запроса из примера 16.2 совсем немного отличается от результата запроса из примера 16.1a. Добавились две последние строки, показывающие максимальные значения зарплаты всех сотрудников предприятия, родившихся в 1950-м и 1960-м гг. соответственно.
Наш пример может навести на мысль, что и в общем случае запросы, содержащие раздел GROUP BY CUBE, не слишком отличаются от запросов с GROUP BY ROLLUP, и выполнение этих запросов тоже не слишком различается. Однако это совсем не так. Запрос, содержащий раздел GROUP BY CUBE, действительно вырождается в объединение результатов 2n запросов с обычным разделом GROUP BY. Соответственно, сложность выполнения такого запроса несравненно выше сложности выполнения похожего запроса с GROUP BY ROLLUP. В нашем примере все получилось так просто только по той причине, что в запросе имеются всего два столбца группировки.
- Введение в модель данных sql
- 1. Лекция: Язык баз данных sql: общее введение, типы данных и средства определения доменов Введение
- Краткая история языка sql
- Структура языка sql
- Типы данных sql
- Tочные числовые типы
- Истинно целые типы
- Точные типы, допускающие наличие дробной части
- Приближенные числовые типы
- Типы символьных строк
- Типы битовых строк
- Типы даты и времени
- Тип даты
- Типы времени
- Типы временной метки
- Типы времени и временной метки с временной зоной
- Типы временных интервалов
- Булевский тип
- Типы коллекций
- Типы массивов
- Типы мультимножеств
- Анонимные строчные типы
- Типы, определяемые пользователем
- Ссылочные типы
- Средства определения, изменения определения и отмены определения доменов
- Определение домена
- Примеры определений доменов
- Изменение определения домена
- Примеры изменения определения домена
- Отмена определения домена
- Неявные и явные преобразования типа или домена
- Неявные преобразования типов в sql
- Явные преобразования типов или доменов и оператор cast
- Заключение
- 2. Лекция: Язык баз данных sql: средства определения базовых таблиц и ограничений целостности
- Введение
- Средства определения, изменения и ликвидации базовых таблиц
- Определение базовой таблицы
- Определение столбца
- Значения столбца по умолчанию
- Ограничения целостности столбца
- Определение табличного ограничения
- Табличное ограничение первичного или возможного ключа
- Проверочное табличное ограничение
- Табличное ограничение внешнего ключа
- Разновидности способов сопоставления значений внешнего и возможного ключей
- Поддержка ссылочной целостности и ссылочные действия
- Примеры определений базовых таблиц
- Изменение определения базовой таблицы
- Добавление, изменение или удаление определения столбца
- Примеры изменения определения столбца
- Изменение набора табличных ограничений
- Примеры изменения набора табличных ограничений
- Отмена определения (уничтожение) базовой таблицы
- Средства определения и отмены общих ограничений целостности
- Определение общих ограничений целостности
- Отмена определения общего ограничения целостности
- Немедленная и откладываемая проверка ограничений
- Заключение
- 3. Лекция: Язык баз данных sql: общая характеристика оператора select и организация списка ссылок на таблицы в разделе from
- 4. Лекция: Язык баз данных sql: предикаты раздела where оператора select
- Предикат сравнения
- Примеры запросов с использованием предиката сравнения
- Предикат between
- Примеры запросов с использованием предиката between
- Предикат null
- Примеры запросов с использованием предиката null
- Предикат in
- Примеры запросов с использованием предиката in
- Предикат like
- Примеры запросов с использованием предиката like
- Предикат similar
- Примеры запросов с использованием предиката similar
- Предикат exists
- Примеры запросов с использованием предиката exists
- Предикат unique
- Примеры запросов с использованием предиката unique
- Предикат overlaps
- Примеры запросов с использованием предиката overlaps
- Предикат сравнения с квантором
- Примеры запросов с использованием предиката сравнения с квантором
- Предикат match
- Примеры запросов с использованием предиката match
- Предикат distinct
- Примеры запросов с использованием предиката distinct
- Заключение
- 5. Лекция: Язык баз данных sql: группировка и условия раздела having, порождаемые и соединенные таблицы
- Логические выражения раздела having
- Предикаты сравнения
- Предикат between
- Предикат null
- Предикат in
- Предикат like
- Предикат exists
- Предикат unique
- Предикаты сравнения с квантором
- Предикат distinct
- Более сложные конструкции оператора выборки
- Соединенные таблицы
- Формальные определения
- Примеры соединений разного вида
- Примеры запросов с использованием соединенных таблиц
- 6. Лекция: Язык баз данных sql: средства формулировки аналитических и рекурсивных запросов
- Возможности формулирования аналитических запросов
- Раздел group by rollup
- Агрегатная функция grouping
- Раздел group by cube
- Рекурсивные запросы
- Определения, относящиеся к рекурсии
- Рекурсивные запросы с разделом with
- Раздел search
- Раздел cyrcle
- Рекурсивные представления
- Заключение
- 7. Лекция: Язык баз данных sql: средства манипулирования данными
- Введение
- Базовые средства манипулирования данными
- Оператор insert для вставки строк в существующие таблицы
- Вставка всех строк указанной таблицы
- Вставка явно заданного набора строк
- Вставка строк результата запроса
- Оператор update для модификации существующих строк в существующих таблицах
- Оператор delete для удаления строк в существующих таблицах
- Представления, над которыми возможны операции обновления
- Представления, допускающие применение операций обновления, в стандарте sql/92
- Представления, допускающие применение операций обновления, в стандарте sql:1999
- Критерии применимости операций обновления
- Правила функциональных зависимостей
- Раздел with check option определения представления
- Режимы проверки cascaded и local
- Примеры результатов действия раздела with check option
- Исторический очерк