Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нарастающий итог / 25 сообщений из 25, страница 1 из 1
18.07.2017, 12:52
    #39490711
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
Всем привет
a b c ss 1 1ss 2 1ss 3 1ss1 1 2ss1 2 2ss1 3 2ss2 1 1ss2 2 1ss2 3 1
Подскажите, как посчитать нарастающий итог по колонке С , чтобы он не учитывал повторяющиеся значения в группе(общий distinct нельзя , так как у других А могут быть такие же С)
Так понимаю что-то должно помочь RANGE/ROWS но что-то не получается, считает все подряд...
...
Рейтинг: 0 / 0
18.07.2017, 12:56
    #39490718
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
Код: plsql
1.
sum(case when c_rn = 1 then c end) over …
...
Рейтинг: 0 / 0
18.07.2017, 13:06
    #39490728
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-totalПодскажите, как посчитать нарастающий итог по колонке С , чтобы он не учитывал повторяющиеся значения в группе(общий distinct нельзя , так как у других А могут быть такие же С)
Не совсем понятно что имеете ввиду.
Какой результат ожидается на примере:
a b c ss 1 1ss 2 2ss 3 3ss1 1 3ss1 2 2ss1 3 1ss2 1 1ss2 2 1ss2 3 1
?
...
Рейтинг: 0 / 0
18.07.2017, 13:25
    #39490755
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
andrey_anonymous,

a b css 1 1ss 2 1ss 3 1ss1 1 2ss1 2 2ss1 3 2ss2 1 1ss2 2 1ss2 3 1

Итог должен быть такой :
namea b c run-totf ss 1 1 3f ss 2 13f ss 3 13f ss1 1 23f ss1 2 23f ss1 3 23hss2 1 11hss2 2 11hss2 3 11
...
Рейтинг: 0 / 0
18.07.2017, 13:32
    #39490762
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-total,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as (select 'f' name,	'ss' a,	1 b,	1 c from dual union all
select 'f',	'ss',	2,	1 c from dual union all
select 'f',	'ss',	3,	1 c from dual union all
select 'f',	'ss1',	1,	2 c from dual union all
select 'f',	'ss1',	2,	2 c from dual union all
select 'f',	'ss1',	3,	2 c from dual union all
select 'h',	'ss2',	1,	1 c from dual union all
select 'h',	'ss2',	2,	1 c from dual union all
select 'h',	'ss2',	3,	1 c from dual)

select t.*, sum(distinct c) over (partition by name) from t
...
Рейтинг: 0 / 0
18.07.2017, 13:33
    #39490765
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-totalИтог должен быть такой
Гм... А КАК?
...
Рейтинг: 0 / 0
18.07.2017, 13:35
    #39490768
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-total,

написал селект из итога, первый Ваш пост с ним не карелирует
...
Рейтинг: 0 / 0
18.07.2017, 13:38
    #39490774
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
MaximaXXL,

sum(distinct c) низя
...
Рейтинг: 0 / 0
18.07.2017, 13:41
    #39490777
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-totalMaximaXXL,

sum(distinct c) низя

Профессор не разрешил? Даже с over?
...
Рейтинг: 0 / 0
18.07.2017, 13:46
    #39490783
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
MaximaXXL,

автор(общий distinct нельзя , так как у других А могут быть такие же С)
...
Рейтинг: 0 / 0
18.07.2017, 13:50
    #39490787
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-totalMaximaXXL,

автор(общий distinct нельзя , так как у других А могут быть такие же С)


Это такой изысканный тролинг?

потому он не общий, а частный sum(distinct c) over (partition by name) для каждого name

если хотите для каждого А ... что не будет соответствовать "итогу" в том виде что Вы написали, тогда так:
Код: plsql
1.
sum(distinct c) over (partition by a)
...
Рейтинг: 0 / 0
18.07.2017, 14:17
    #39490818
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
MaximaXXL,

не пойдет так, проблема в том, что например будут такие данные:

Итог должен быть такой :
name, a, b, c, run-tot
f, ss, 1, 1, 2,
f, ss, 2, 1, 2,
f, ss, 3, 1, 2,
f, ss1, 1, 1, 2,
f, ss1, 2, 1, 2,
f, ss1, 3, 1, 2,
h, ss2 ,1, 2, 1,
h, ss2, 2, 2, 1,
h, ss2, 3, 2, 1,

и distinct съест все 1 у F , а должно идти по A , а если делать группировку и по А то будет соответственно для каждого А свой итог.
Нужно, чтобы для каждого F был свой итог который считается по всем А для него и убирает повторяющиеся значения по B
...
Рейтинг: 0 / 0
18.07.2017, 14:20
    #39490821
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
таблица к предыдущему посту:
name a b c run-totf ss 1 1 2f ss 2 1 2f ss 3 1 2f ss1 1 1 2f ss1 2 1 2f ss1 3 1 2h ss2 1 3 3h ss2 2 3 3h ss2 3 3 3
...
Рейтинг: 0 / 0
18.07.2017, 14:30
    #39490836
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-total,

Чудило, не морочь людям голову. Как задавать вопросы по sql
...
Рейтинг: 0 / 0
18.07.2017, 14:51
    #39490856
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
AmKad,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with tt as (
  select 'petya' name , 'dir' dol, 1 zp, 1 pr from dual
  union all
  select 'petya' name , 'dir' dol, 2 zp, 1 pr from dual
  union all
  select 'petya' name, 'dir' dol, 3 zp, 1 pr from dual
  union all
  select 'petya' name, 'dir2' dol, 1 zp, 1 pr from dual
  union all
  select 'petya' name , 'dir2' dol, 2 zp, 1 pr from dual
  union all
  select 'petya' name , 'dir2' dol, 3 zp, 1 pr from dual
  union all
  select 'alex' name, 'dir' dol, 1 zp, 1 pr from dual
  union all
  select 'alex' name, 'dir' dol, 2 zp, 1 pr from dual
  union all
  select 'alex' name, 'dir' dol, 3 zp, 1 pr from dual   
)
select * from tt



Нужен нарастающий итог для NAME по PR,DOL с исключением повторяющихся записей в PR,
то есть итог должен быть таким:

name dolzppr run-totpetya dir 1 12petya dir 2 12petya dir 3 12petya dir2 1 12petya dir2 2 12petya dir2 3 12alex dir 1 11alex dir 2 11alex dir 3 11
...
Рейтинг: 0 / 0
18.07.2017, 15:24
    #39490887
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-total,

1) Твой пример на раскрывает тайной завесы над тем, чем тебя не устраивают решения Elic-а и MaximXXL.
2) Тема нарастания также не раскрыта.
...
Рейтинг: 0 / 0
18.07.2017, 16:09
    #39490940
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
AmKad,

Попробуй по MaximXXL и увидишь, что получается не так, как надо(съедает лишние сИфиры)...
По Elic , резонно, нужно только количество строк заранее по группе расcчитать, и в case 0 проставить где > 1
Думал может магия есть какая в аналитике в ранжировании или в строках как то указать , аля ROWS = 1 для группы
...
Рейтинг: 0 / 0
18.07.2017, 16:38
    #39490964
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-totalПо Elic , резонно, нужно только количество строк заранее по группе расcчитать,Не количество.
running-totalи в case 0 проставить где > 1Не нужно.
...
Рейтинг: 0 / 0
18.07.2017, 17:38
    #39491048
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-total,
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2    select 'petya' name , 'dir' dol, 1 zp, 1 pr from dual
  3    union all
  4    select 'petya' name , 'dir' dol, 2 zp, 1 pr from dual
  5    union all
  6    select 'petya' name, 'dir' dol, 3 zp, 1 pr from dual
  7    union all
  8    select 'petya' name, 'dir2' dol, 1 zp, 1 pr from dual
  9    union all
 10    select 'petya' name , 'dir2' dol, 2 zp, 1 pr from dual
 11    union all
 12    select 'petya' name , 'dir2' dol, 3 zp, 1 pr from dual
 13    union all
 14    select 'alex' name, 'dir' dol, 1 zp, 1 pr from dual
 15    union all
 16    select 'alex' name, 'dir' dol, 2 zp, 1 pr from dual
 17    union all
 18    select 'alex' name, 'dir' dol, 3 zp, 1 pr from dual
 19  )
 20  , tt as (
 21  select t.*, lag(null,1,pr) over (partition by name,dol order by zp) l from t)
 22  select tt.*,sum(l) over (partition by name) ss from tt
 23* order by 1,2,3
SQL> /

NAME  DOL          ZP         PR L                                                SS
----- ---- ---------- ---------- ---------------------------------------- ----------
alex  dir           1          1 1                                                 1
alex  dir           2          1                                                   1
alex  dir           3          1                                                   1
petya dir           1          1 1                                                 2
petya dir           2          1                                                   2
petya dir           3          1                                                   2
petya dir2          1          1 1                                                 2
petya dir2          2          1                                                   2
petya dir2          3          1                                                   2


9 rows selected.



stax
...
Рейтинг: 0 / 0
18.07.2017, 17:46
    #39491068
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-total,

Вы что-то такое хотели?
Код: plsql
1.
2.
3.
select name, dol, zp, pr, sum(sn)over(partition by name)  from (
                 select name, dol, zp, pr, decode(pr,lag(pr) over(partition by name,dol ORDER BY pr),0,pr) sn from tt
                 )



По постановке и примерам так и не скажешь ....
...
Рейтинг: 0 / 0
18.07.2017, 18:33
    #39491095
running-total
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
Всем спасибо,с lag все стало на свои места, хорошая идея!
...
Рейтинг: 0 / 0
19.07.2017, 08:55
    #39491312
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
running-totalВсем спасибо,с lag все стало на свои места, хорошая идея!

нюансик есть, если pr разные
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
  1    with t as (
  2      select 'petya' name , 'dir' dol, 1 zp, 1 pr from dual
  3      union all
  4      select 'petya' name , 'dir' dol, 2 zp, 1 pr from dual
  5      union all
  6      select 'petya' name, 'dir' dol, 3 zp, 1 pr from dual
  7      union all
  8      select 'petya' name, 'dir' dol, 4 zp, 10 pr from dual
  9      union all
 10      select 'petya' name, 'dir2' dol, 1 zp, 1 pr from dual
 11      union all
 12      select 'petya' name , 'dir2' dol, 2 zp, 1 pr from dual
 13      union all
 14      select 'petya' name , 'dir2' dol, 3 zp, 1 pr from dual
 15      union all
 16      select 'alex' name, 'dir' dol, 1 zp, 1 pr from dual
 17      union all
 18      select 'alex' name, 'dir' dol, 2 zp, 1 pr from dual
 19      union all
 20      select 'alex' name, 'dir' dol, 3 zp, 1 pr from dual
 21  )
 22  , tt as (
 23    select t.*, lag(cast(null as int),1,pr) over (partition by name,dol,pr order by null) l from t)
 24    select tt.*,sum(l) over (partition by name) ss from tt
 25* order by 1,2,3
SQL> /

NAME  DOL          ZP         PR   L         SS
----- ---- ---------- ---------- --- ----------
alex  dir           1          1              1
alex  dir           2          1   1          1
alex  dir           3          1              1
petya dir           1          1             12
petya dir           2          1             12
petya dir           3          1   1         12
petya dir           4         10  10         12
petya dir2          1          1             12
petya dir2          2          1             12
petya dir2          3          1   1         12

10 rows selected.




.....
stax
...
Рейтинг: 0 / 0
19.07.2017, 09:00
    #39491314
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
stax..,

Можно мой взять, он это учитывает
...
Рейтинг: 0 / 0
19.07.2017, 09:52
    #39491351
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
stax..,

Очень мне понравилась такая работа с lag, никогда раньше так не делал, спасибо за наводку
Но в конкретном примере вместо cast(null as int) я бы предложил 0, все равно дальше на суммирование.
Код: plsql
1.
 lag(0,1,pr) over (partition by name,dol,pr order by null)
...
Рейтинг: 0 / 0
19.07.2017, 11:11
    #39491407
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарастающий итог
MaximaXXLstax..,

Очень мне понравилась такая работа с lag, никогда раньше так не делал, спасибо за наводку
Но в конкретном примере вместо cast(null as int) я бы предложил 0, все равно дальше на суммирование.
Код: plsql
1.
 lag(0,1,pr) over (partition by name,dol,pr order by null)


я не против, привык null вбивать, мне удобно

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нарастающий итог / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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