Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хитрое суммирование / 20 сообщений из 20, страница 1 из 1
06.10.2016, 12:12:33
    #39321784
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
Добрый день, есть примерно следующий набор данных и запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select sum(max(plan)) from (          
select     45893 as id_tutor ,	50082	as id_learner,'Должность' as name ,	 1 as plan from dual
union all
select     45893 as id_tutor ,	82373	as id_learner,	'Должность' as name , 4 as plan from dual
union all
select     45893 as id_tutor ,	85201	as id_learner,	'Должность' as name , 4 as plan from dual
union all
select     45893 as id_tutor ,	85201	as id_learner,	'Должность' as name , 4 as plan from dual
) group by id_tutor,id_learner



Возвращает он абсолютно верный результат - 9.
Можно ли реализовать такой же результат исключая группировку по id_learner ???

Спасибо
...
Рейтинг: 0 / 0
06.10.2016, 12:16:12
    #39321789
Кэп 2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
artas,

Код: 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.
select sum(plan)-4
  from (select 45893 as id_tutor,
               50082 as id_learner,
               'Должность' as name,
               1 as plan
          from dual
        union all
        select 45893 as id_tutor,
               82373 as id_learner,
               'Должность' as name,
               4 as plan
          from dual
        union all
        select 45893 as id_tutor,
               85201 as id_learner,
               'Должность' as name,
               4 as plan
          from dual
        union all
        select 45893 as id_tutor,
               85201 as id_learner,
               'Должность' as name,
               4 as plan
          from dual)
...
Рейтинг: 0 / 0
06.10.2016, 12:17:55
    #39321792
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
Кэп 2, ник соответствует
...
Рейтинг: 0 / 0
06.10.2016, 12:21:10
    #39321795
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
artas,

Можно вообще без group by.
...
Рейтинг: 0 / 0
06.10.2016, 12:35:15
    #39321807
Теща кэпа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
artasКэп 2, ник соответствует

Вы лучше расскажите, что вы хотите, чуть более распространенно, чем "хочу 9"
...
Рейтинг: 0 / 0
06.10.2016, 12:44:29
    #39321816
Хитрое суммирование
Теща кэпа,

сумма по дистинкту ид. типичная задача для денормализованных данных. решается через поданалитику или пользовательский агрегат.
...
Рейтинг: 0 / 0
06.10.2016, 12:45:47
    #39321818
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
Теща кэпа,

Код: plaintext
select sum(plan) from (select distinct ...)
...
Рейтинг: 0 / 0
06.10.2016, 13:01:52
    #39321832
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
dbms_photoshop,

спасибо, решение подзапросами только на крайний случай
...
Рейтинг: 0 / 0
06.10.2016, 13:09:06
    #39321840
Хитрое суммирование
artasdbms_photoshop,

спасибо, решение подзапросами только на крайний случайс чем связаны подзапросо и группо фобии?
...
Рейтинг: 0 / 0
06.10.2016, 14:58:45
    #39321989
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
artas,

скорее в качестве шютки (если подойдет добавить to_char)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  1  select trunc(sum(distinct plan||',00000'||id_tutor||id_learner)) sss from (
  2  select     45893 as id_tutor ,     50082   as id_learner,'Должность' as name ,      1 as plan from dual
  3  union all
  4  select     45893 as id_tutor ,     82373   as id_learner,  'Должность' as name , 4 as plan from dual
  5  union all
  6  select     45893 as id_tutor ,     85201   as id_learner,  'Должность' as name , 4 as plan from dual
  7  union all
  8  select     45893 as id_tutor ,     85201   as id_learner,  'Должность' as name , 4 as plan from dual
  9  )
 10* --group by id_tutor,id_learner
SQL> /

       SSS
----------
         9



.....
stax
...
Рейтинг: 0 / 0
06.10.2016, 14:59:45
    #39321993
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
на крайнюю плоть,

нет, с тем что это выборка получаеться из довольно грузного подзапроса +, наверное все-же до конца правильно дал задание, т.к. упростил до минимума

вот такой идеал данных, с условием без группировки по id_learner

id_tutor id_learner plan
45893 50082 9
45893 82373 9
45893 85201 9
...
Рейтинг: 0 / 0
06.10.2016, 15:38:44
    #39322033
Хитрое суммирование
artas,

приведенные строки это конкурс я разгадаю алгоритм с трех строк результата?
подходит обычный sum over поверх group by.
...
Рейтинг: 0 / 0
06.10.2016, 16:51:27
    #39322140
artas1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
конечный автомат ЧЯ,

ну, если дословно описать то получаеться сумма планов по дистинкт id_tutor
...
Рейтинг: 0 / 0
06.10.2016, 17:32:25
    #39322196
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
artasна крайнюю плоть,

нет, с тем что это выборка получаеться из довольно грузного подзапроса +, наверное все-же до конца правильно дал задание, т.к. упростил до минимума

вот такой идеал данных, с условием без группировки по id_learner

id_tutor id_learner plan
45893 50082 9
45893 82373 9
45893 85201 9


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  1  select distinct
  2  id_tutor,id_learner,trunc(sum(distinct plan||',00000'||id_learner) over (partition by id_tutor)) sss
  3   from (
  4  select     45893 as id_tutor ,     50082   as id_learner,'Должность' as name ,      1 as plan from dua
  5  union all
  6  select     45893 as id_tutor ,     82373   as id_learner,  'Должность' as name , 4 as plan from dual
  7  union all
  8  select     45893 as id_tutor ,     85201   as id_learner,  'Должность' as name , 4 as plan from dual
  9  union all
 10  select     45893 as id_tutor ,     85201   as id_learner,  'Должность' as name , 4 as plan from dual
 11  )
 12* --group by id_tutor,id_learner
SQL> /

  ID_TUTOR ID_LEARNER        SSS
---------- ---------- ----------
     45893      85201          9
     45893      82373          9
     45893      50082          9



.....
stax
...
Рейтинг: 0 / 0
06.10.2016, 17:45:58
    #39322204
artas1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
stax..,

Гениально, спасибо большое
...
Рейтинг: 0 / 0
06.10.2016, 18:19:16
    #39322228
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
artas1Гениально, спасибо большое
Ну да, ну да...
Полагаете, уважаемый stax.. смайлик рисовал просто от хорошего настроения?
...
Рейтинг: 0 / 0
06.10.2016, 19:19:28
    #39322272
grreens
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
artas1,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select id_tutor,id_learner, sum(plan) over () from (          
select     45893 as id_tutor ,	50082	as id_learner,'Должность' as name ,	 1 as plan from dual
union all
select     45893 as id_tutor ,	82373	as id_learner,	'Должность' as name , 4 as plan from dual
union all
select     45893 as id_tutor ,	85201	as id_learner,	'Должность' as name , 4 as plan from dual
union all
select     45893 as id_tutor ,	85201	as id_learner,	'Должность' as name , 4 as plan from dual
) group by id_tutor,id_learner, plan
...
Рейтинг: 0 / 0
06.10.2016, 19:20:51
    #39322274
grreens
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
grreens,

select id_tutor,id_learner, sum(plan) over (partition by id_tutor) from (
select 45893 as id_tutor , 50082 as id_learner,'Должность' as name , 1 as plan from dual
union all
select 45893 as id_tutor , 82373 as id_learner, 'Должность' as name , 4 as plan from dual
union all
select 45893 as id_tutor , 85201 as id_learner, 'Должность' as name , 4 as plan from dual
union all
select 45893 as id_tutor , 85201 as id_learner, 'Должность' as name , 4 as plan from dual
) group by id_tutor,id_learner, plan
...
Рейтинг: 0 / 0
07.10.2016, 10:13:27
    #39322496
artas1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое суммирование
grreens,

я же сразу написал, нужно только с группировкой по колонке тутора
...
Рейтинг: 0 / 0
07.10.2016, 10:42:55
    #39322532
Хитрое суммирование
artas1нужнотак никто не запрещает, как тебе нужно так и пиши. другие пишут как посчитали правильным.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хитрое суммирование / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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