Joomla 3.1 Templates by FatCow Coupon

Как работают RollUp и Cube?

Категория: Блог Опубликовано 24.05.2017

Подари,продай, обменяй - множество недорогих и отличных вещей объявления вместо AVITO - ВКонтакте

-- rollup и cube специальные групповые опepации oracle 
-- применяются начиная с версии 8i 
-- очень удобно использовать rollup cube при подведении итогов
-- некоторые из операций могут быть заменены га аналитический sql

-- давайте разберем на примерах

 

-- создадим тестовую таблицу

 

create table t1(tid number,tname varchar2(80));
insert into t1 values (10,'Акулина');
insert into t1 values (20,'Бронислав');
insert into t1 values (30,'Богдан');
insert into t1 values (40,'Борислав');
insert into t1 values (50,'Божена');
insert into t1 values (60,'Ванда');
insert into t1 values (70,'Владислав');
insert into t1 values (80,'Вилен');
insert into t1 values (90,'Вера');
insert into t1 values (100,'Доля');
insert into t1 values (110,'Ждан');
insert into t1 values (120,'Лада');
insert into t1 values (130,'Любомила');
insert into t1 values (140,'Мартин');
insert into t1 values (150,'Милан');
insert into t1 values (160,'Мичлов');
insert into t1 values (170,'Мечеслав');
insert into t1 values (180,'Олеся');
insert into t1 values (190,'Рада');
insert into t1 values (200,'Ростислав');
insert into t1 values (210,'Святослав');
insert into t1 values (220,'Станислав');
insert into t1 values (230,'Томила');



-- попробуем вычислить сколько имен начинаются с заданной буквы

select substr(tname,1,1) Caps, count(tname) countr from t1 group by substr(tname,1,1)  

-- А 1
-- Б 4
-- В 4
-- Д 1
-- Ж 1
-- Л 2
-- М 4
-- О 1
-- Р 2
-- С 2
-- Т 1


-- перестроим запрос с использованием команды ROLLUP

select substr(tname,1,1) Caps, count(tname) countr from t1 group by ROLLUP(substr(tname,1,1))


-- А 1
-- Б 4
-- В 4
-- Д 1
-- Ж 1
-- Л 2
-- М 4
-- О 1
-- Р 2
-- С 2
-- Т 1
-- 23

-- ключевое слово grupping, позволяет отследить урони группировки
-- перестроим запрос с использованием команды , rollup 
-- приложение grouping демонстрирует уровень группировки

select substr(tname,1,1) Caps, substr(tname,1,2) Caps2, count(tname) tr, grouping(substr(tname,1,1)) gr1, grouping(substr(tname,1,2)) gr2 
  from t1 group by ROLLUP(substr(tname,1,1),substr(tname,1,2))


-- А Ак 1 0 0
-- А 1 0 1
-- Б Бо 3 0 0
-- Б Бр 1 0 0
-- Б 4 0 1
-- В Ва 1 0 0
-- В Ве 1 0 0
-- В Ви 1 0 0
-- В Вл 1 0 0
-- В 4 0 1
-- Д До 1 0 0
-- Д 1 0 1
-- Ж Жд 1 0 0
-- Ж 1 0 1
-- Л Ла 1 0 0
-- Л Лю 1 0 0
-- Л 2 0 1
-- М Ма 1 0 0
-- М Ме 1 0 0
-- М Ми 2 0 0
-- М 4 0 1
-- О Ол 1 0 0
-- О 1 0 1
-- Р Ра 1 0 0
-- Р Ро 1 0 0
-- Р 2 0 1
-- С Св 1 0 0
-- С Ст 1 0 0
-- С 2 0 1
-- Т То 1 0 0
-- Т 1 0 1
-- 23 1 1

-- в данном контексте более интересно применение оператора CUBE, который позволяет подводить дополнительные итоги

select substr(tname,1,1) Caps, substr(tname,1,2) Caps2, count(tname) tr, grouping(substr(tname,1,1)) gr1, grouping(substr(tname,1,2)) gr2 
  from t1 group by cube(substr(tname,1,1),substr(tname,1,2))


-- 23 1 1
-- Ак 1 1 0
-- Бо 3 1 0
-- Бр 1 1 0
-- Ва 1 1 0
-- Ве 1 1 0
-- Ви 1 1 0
-- Вл 1 1 0
-- До 1 1 0
-- Жд 1 1 0
-- Ла 1 1 0
-- Лю 1 1 0
-- Ма 1 1 0
-- Ме 1 1 0
-- Ми 2 1 0
-- Ол 1 1 0
-- Ра 1 1 0
-- Ро 1 1 0
-- Св 1 1 0
-- Ст 1 1 0
-- То 1 1 0
-- А 1 0 1
-- А Ак 1 0 0
-- Б 4 0 1
-- Б Бо 3 0 0
-- Б Бр 1 0 0
-- В 4 0 1
-- В Ва 1 0 0
-- В Ве 1 0 0
-- В Ви 1 0 0
-- В Вл 1 0 0
-- Д 1 0 1
-- Д До 1 0 0
-- Ж 1 0 1
-- Ж Жд 1 0 0
-- Л 2 0 1
-- Л Ла 1 0 0
-- Л Лю 1 0 0
-- М 4 0 1
-- М Ма 1 0 0
-- М Ме 1 0 0
-- М Ми 2 0 0
-- О 1 0 1
-- О Ол 1 0 0
-- Р 2 0 1
-- Р Ра 1 0 0
-- Р Ро 1 0 0
-- С 2 0 1
-- С Св 1 0 0
-- С Ст 1 0 0
-- Т 1 0 1
-- Т То 1 0 0

Просмотров: 273