Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Group with sum / 4 сообщений из 4, страница 1 из 1
07.02.2017, 14:29
    #39400148
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Group with sum
Есть таблица
USER, MARK
==========
USER1, 1
USER1, 2
USER1, 3
USER2, 1
USER2, 2
USER3, 2
USER, 1
USER, 2

Надо сгруппировать по USER, count(*)

USER, count(*)
==========
USER1, 3
USER2, 3
USER, 2

И добавить еще строчку строку
TOTAL - которая будет содержать все записи где USER не равен "USER" и сумме всех count(*) без "USER"

Те на выходе получается

USER, count(*)
==========
USER1, 3
USER2, 3
USER, 2
TOTAL, 6

Как можно это органиховать?
...
Рейтинг: 0 / 0
07.02.2017, 15:09
    #39400184
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Group with sum
-=Koba=-,
Это даже скорее подгон под результат, чем решение:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with t as (
           select 'USER1' as name, 1 as amt from dual union all
select 'USER1', 2 from dual union all
select 'USER1', 3 from dual union all
select 'USER2', 1 from dual union all
select 'USER2', 2 from dual union all
select 'USER2', 2 from dual union all
select 'USER', 1 from dual union all
select 'USER', 2 from dual 
          )

select case when name is null then 'TOTAL' else name end, a from (
select name, count(*) as a, case when name = 'USER' then null else 1 end as gr
  from  t
  group by grouping sets(case when name = 'USER' then null else 1 end, name))
where name is not null or gr is not null
order by 1 desc 
...
Рейтинг: 0 / 0
07.02.2017, 16:11
    #39400251
Glays
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Group with sum
-=Koba=-,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
WITH t
     AS (SELECT 'USER1' AS name, 1 AS amt FROM DUAL
         UNION ALL
         SELECT 'USER1', 2 FROM DUAL
         UNION ALL
         SELECT 'USER1', 3 FROM DUAL
         UNION ALL
         SELECT 'USER2', 1 FROM DUAL
         UNION ALL
         SELECT 'USER2', 2 FROM DUAL
         UNION ALL
         SELECT 'USER2', 2 FROM DUAL
         UNION ALL
         SELECT 'USER', 1 FROM DUAL
         UNION ALL
         SELECT 'USER', 2 FROM DUAL)
  SELECT name, COUNT (*) AS a
    FROM T
   WHERE NAME = 'USER'
GROUP BY NAME
UNION ALL
  SELECT NVL (name, 'TOTAL'), COUNT (*) AS a
    FROM T
   WHERE NAME != 'USER'
GROUP BY ROLLUP (NAME)
...
Рейтинг: 0 / 0
08.02.2017, 08:13
    #39400566
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Group with sum
-=Koba=-,

Вот еще так можно,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
With qq as(
SELECT 'USER1' AS name, 1 AS amt FROM DUAL 
UNION ALL SELECT 'USER1', 2 FROM DUAL
UNION ALL SELECT 'USER1', 3 FROM DUAL
UNION ALL SELECT 'USER2', 1 FROM DUAL
UNION ALL SELECT 'USER2', 2 FROM DUAL
UNION ALL SELECT 'USER2', 2 FROM DUAL
UNION ALL SELECT 'USER', 1 FROM DUAL
UNION ALL SELECT 'USER', 2 FROM DUAL
)         
select nvl(name,'TOTAL'), count(*) 
from qq
group by rollup(name)


---------------

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
With qq as(
SELECT 'USER1' AS name, 1 AS amt FROM DUAL 
UNION ALL SELECT 'USER1', 2 FROM DUAL
UNION ALL SELECT 'USER1', 3 FROM DUAL
UNION ALL SELECT 'USER2', 1 FROM DUAL
UNION ALL SELECT 'USER2', 2 FROM DUAL
UNION ALL SELECT 'USER2', 2 FROM DUAL
UNION ALL SELECT 'USER', 1 FROM DUAL
UNION ALL SELECT 'USER', 2 FROM DUAL
)         
select decode(grouping(name),0,to_char(name),'TOTAL') name, count(*) 
from qq
group by rollup(name);
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Group with sum / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]