Вы находитесь на страницах старой версии сайта. Перейдите на новую версию OLAP.ru |
Поиск по сайту | ||||||
Новости | ||||||
Основы OLAP | ||||||
Продукты | ||||||
Business Objects/ Crystal Decisions | ||||||
Каталог | ||||||
OLAP в жизни | ||||||
Тенденции | ||||||
Download | ||||||
| ||||||
Функции ROLLUP и CUBE в предложении SELECTСтивен Фернстайн, Russian Oracle Internet Magazine Рекомендации RevealNet (группа PL/SQL) за январь 2001 Новые возможности Oracle 8i - ROLLUP и CUBE существенно упрощают программирование на SQL тем, что устраняют необходимость проектировать UNION-предложения. Приводимые ниже примеры демонстрируют это: Выведем строки таблицы EMP из всем в Oracle известной схемы SCOTT:
14 rows selected.
Если при этом нужно также вывести на выход число служащих, требуется ввести фразу UNION, как показано ниже:
В Oracle8i можно использовать опцию ROLLUP, чтобы достигнуть того же самого результата:
Просто включая функцию ROLLUP во фразе GROUP BY, мы указываем Oracle, чтобы он просуммировал данные по уровнях указанных выше столбцов и подвел общий итог. Обратите внимание, что когда Oracle сообщает общий итог, то остается незаполненной строка в столбце, по которому строилась фраза GROUP BY. Если столбец GROUP BY также содержит пустые значения, то может быть трудно отличить его значения от итога по строке. К счастью, мы можем использовать специальную функцию, называемую GROUPING, которая сообщает о статусе (summarization) текущего уровеня. Функция возвращает два значения: "0" указывает, что текущая строка является группой, специфицированной уровнем GROUP BY, а "1" указывает, что строка сгруппирована на более высоком уровне.
Теперь мы можем получить преимущества от использования функции GROUPING при форматировании выходного листинга:
Функция ROLLUP, действительно, может работать на нескольких столбцах. Результат многоуровнего действия rollup демонстрируется ниже:
Как показано на этом примере, мы можем подсчитать служащих по 1) отделам и профессиям; 2) по отделам; 3) общим итогом. Просто ROLLUP является и CUBE-функцией. CUBE группирует данные по нескольким измерениям. В частности, она суммирует данные, которые явно наличествуют в столбцах, специфицированных в фразе GROUP BY. Посмотрим, как она работает:
Вывод функции CUBE включает выходной листинг, генерируемый ROLLUP. Дополнительно, она отображает число служащих по профессиям, независимо от номера отдела © 2001 Interface Ltd |