форматирование столбцов и удаление дублей - аналитика

_примус
Дата: 29.09.2015 03:50:39
пытаюсь чутку изучить аналитику.

есть запрос:
select 
    decode(lag(owner) over (order by owner, object_type),owner, null, owner) as O,
    decode(lag(object_type) over (order by owner, object_type),object_type, null, object_type) as OT,
    trunc(created) as CR,
    count(*)
from dba_objects
where owner='SYSTEM'
group by rollup (owner,object_type,trunc(created))
order by owner,object_type, trunc(created) 

как мне сделать чтобы во втором столбце где выводятся подитоги по каждому типу объекта было написано "подитог" вместо пустых значений?

про decode(grouping я знаю, но у меня вторая строка и так уже монструозная. Если я все заверну в decode(grouping(OT,1,'subtotals',OT))... мне кажется должен существовать более удобочитаемый вариант.
Добрый Э - Эх
Дата: 29.09.2015 04:47:19
_примус,

Тебе не аналитику, а расширенную группировку изучать нужно - cube, grouping set
_примус
Дата: 29.09.2015 05:00:33
возможно я неправильно назвал то что хотел получить.
вот то что выдает запрос:
O                              OT                  CR                COUNT(*)
------------------------------ ------------------- --------------- ----------
SYSTEM FUNCTION 20-MAY-15 4
4
INDEX 05-NOV-09 190
20-APR-10 4
24-AUG-10 35
19-APR-11 2
20-MAY-15 20
251
INDEX PARTITION 05-NOV-09 31
20-APR-10 1
24-AUG-10 20
20-MAY-15 12
64
LOB 05-NOV-09 19
24-AUG-10 1
19-APR-11 1
20-MAY-15 2
23
PACKAGE 05-NOV-09 1
1
PACKAGE BODY 05-NOV-09 1
1
PROCEDURE 05-NOV-09 1
1
QUEUE 05-NOV-09 4
4
SEQUENCE 05-NOV-09 20
20
SYNONYM 05-NOV-09 8
8
TABLE 05-NOV-09 130
20-APR-10 2
24-AUG-10 20
19-APR-11 1
20-MAY-15 11
164
TABLE PARTITION 05-NOV-09 27
24-AUG-10 12
20-MAY-15 6
45
TRIGGER 05-NOV-09 2
2
TYPE 05-NOV-09 1
20-MAY-15 8
9
VIEW 05-NOV-09 12
20-MAY-15 2
14
611
611
мне нужно, что бы во второй строке, втором столбце (под FUNCTION) было написано "подитог". Ну и далее по аналогии.
Добрый Э - Эх
Дата: 29.09.2015 07:34:05
_примус,

ну так и открой для себя, помимо grouping , ещё GROUP_ID и GROUPING_ID
_примус
Дата: 29.09.2015 08:10:17
select 
    decode(lag(owner) over (order by owner, object_type),owner, null, owner) as O,
    decode(lag(object_type) over (order by owner, object_type),object_type, null, object_type) as OT,
    trunc(created) as CR,
    count(*),
    group_id(), grouping_id(owner), grouping_id(object_type)
from dba_objects
where owner='SYSTEM'
group by rollup (owner,object_type,trunc(created))
order by owner,object_type, trunc(created) 

O          OT                  CR                COUNT(*) GROUP_ID() GROUPING_ID(OWNER) GROUPING_ID(OBJECT_TYPE)
---------- ------------------- --------------- ---------- ---------- ------------------ ------------------------
SYSTEM FUNCTION 20-MAY-15 4 0 0 0
4 0 0 0
INDEX 05-NOV-09 190 0 0 0
20-APR-10 4 0 0 0
24-AUG-10 35 0 0 0
19-APR-11 2 0 0 0
20-MAY-15 20 0 0 0
251 0 0 0
INDEX PARTITION 05-NOV-09 31 0 0 0
20-APR-10 1 0 0 0
24-AUG-10 20 0 0 0
20-MAY-15 12 0 0 0
64 0 0 0
LOB 05-NOV-09 19 0 0 0
24-AUG-10 1 0 0 0
19-APR-11 1 0 0 0
20-MAY-15 2 0 0 0
23 0 0 0
PACKAGE 05-NOV-09 1 0 0 0
1 0 0 0
PACKAGE BODY 05-NOV-09 1 0 0 0
1 0 0 0
PROCEDURE 05-NOV-09 1 0 0 0
1 0 0 0
QUEUE 05-NOV-09 4 0 0 0
4 0 0 0
SEQUENCE 05-NOV-09 20 0 0 0
20 0 0 0
SYNONYM 05-NOV-09 8 0 0 0
8 0 0 0
TABLE 05-NOV-09 130 0 0 0
20-APR-10 2 0 0 0
24-AUG-10 20 0 0 0
19-APR-11 1 0 0 0
20-MAY-15 11 0 0 0
164 0 0 0
TABLE PARTITION 05-NOV-09 27 0 0 0
24-AUG-10 12 0 0 0
20-MAY-15 6 0 0 0
45 0 0 0
TRIGGER 05-NOV-09 2 0 0 0
2 0 0 0
TYPE 05-NOV-09 1 0 0 0
20-MAY-15 8 0 0 0
9 0 0 0
VIEW 05-NOV-09 12 0 0 0
20-MAY-15 2 0 0 0
14 0 0 0
611 0 0 1
611 0 1 1
пока не могу понять как с помощью полученного сделать то что я хочу.

подозреваю нужно и не rollup совсем и много еще чего по-другому.

у тебя есть готовый вариант? ;)
Добрый Э - Эх
Дата: 29.09.2015 08:20:13
_примус,

select 
    decode
      (
        GROUPING_ID (owner,object_type,trunc(created)),
        0, null,
        1, 'Подитог по '||object_type,
        3, 'Подитог по '||owner,
        7, 'Общий итог: '
      ) as x,
    decode(row_number() over(partition by owner order by object_type, trunc(created)),1,owner) as o,
    decode(row_number() over(partition by owner, object_type order by trunc(created)),1,object_type) as ot1,
    trunc(created) cr1,
    count(*),
    GROUPING_ID (owner,object_type,trunc(created))
from dba_objects
--where owner='SYSTEM'
group by rollup (owner,object_type,trunc(created))
order by owner,object_type, trunc(created) 

 
Добрый Э - Эх
Дата: 29.09.2015 08:27:50
Добрый Э - Эх,

ну или ближе к хотелки автора:
автор
что бы во второй строке, втором столбце (под FUNCTION) было написано "подитог". Ну и далее по аналогии.

select 
    decode(GROUPING_ID (owner,object_type,trunc(created)),0,decode(row_number() over(partition by owner order by object_type, trunc(created)),1,owner),3, 'Подитог по '||owner,7,'ИТОГО:') as o1,
    decode(GROUPING_ID (owner,object_type,trunc(created)),0,decode(row_number() over(partition by owner, object_type order by trunc(created)),1,object_type),1, 'Подитог по '||object_type) as ot1,
    trunc(created) cr1,
    count(*)
from dba_objects
where owner='SYSTEM'
group by rollup (owner,object_type,trunc(created))
order by owner,object_type, trunc(created) 
_примус
Дата: 29.09.2015 08:48:41
спасибо.

Добрый Э - Эх
ну или ближе к хотелки автора:

это на самом деле уже мелочи.

наверное уже пробегало, но тем не менее: какова разница между lag и row_number? например с точки зрения производительности или версии оракла...
Elic
Дата: 29.09.2015 09:12:22
_примус
какова разница между lag и row_number? например с точки зрения производительности или версии оракла...
А какая разница между белым и пушистым? Например, с точки зрения внутреннего мира?
_примус
Дата: 29.09.2015 09:26:29
наверное если б я следил за "агрегацией" с 8 версии , не задавал бы таких глупых вопросов.

но пока натыкаюсь на источники где один использует это, а другой то. и в том числе на форуме. и пока картинка не сложилась.