powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нарастающий итог
25 сообщений из 25, страница 1 из 1
Нарастающий итог
    #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
Нарастающий итог
    #39490718
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
sum(case when c_rn = 1 then c end) over …
...
Рейтинг: 0 / 0
Нарастающий итог
    #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
Нарастающий итог
    #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
Нарастающий итог
    #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
Нарастающий итог
    #39490765
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
running-totalИтог должен быть такой
Гм... А КАК?
...
Рейтинг: 0 / 0
Нарастающий итог
    #39490768
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
running-total,

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

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

sum(distinct c) низя

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

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

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


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

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

если хотите для каждого А ... что не будет соответствовать "итогу" в том виде что Вы написали, тогда так:
Код: plsql
1.
sum(distinct c) over (partition by a)
...
Рейтинг: 0 / 0
Нарастающий итог
    #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
Нарастающий итог
    #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
Нарастающий итог
    #39490836
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
running-total,

Чудило, не морочь людям голову. Как задавать вопросы по sql
...
Рейтинг: 0 / 0
Нарастающий итог
    #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
Нарастающий итог
    #39490887
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
running-total,

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

Попробуй по MaximXXL и увидишь, что получается не так, как надо(съедает лишние сИфиры)...
По Elic , резонно, нужно только количество строк заранее по группе расcчитать, и в case 0 проставить где > 1
Думал может магия есть какая в аналитике в ранжировании или в строках как то указать , аля ROWS = 1 для группы
...
Рейтинг: 0 / 0
Нарастающий итог
    #39490964
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
running-totalПо Elic , резонно, нужно только количество строк заранее по группе расcчитать,Не количество.
running-totalи в case 0 проставить где > 1Не нужно.
...
Рейтинг: 0 / 0
Нарастающий итог
    #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
Нарастающий итог
    #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
Нарастающий итог
    #39491095
running-total
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо,с lag все стало на свои места, хорошая идея!
...
Рейтинг: 0 / 0
Нарастающий итог
    #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
Нарастающий итог
    #39491314
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Можно мой взять, он это учитывает
...
Рейтинг: 0 / 0
Нарастающий итог
    #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
Нарастающий итог
    #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
25 сообщений из 25, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нарастающий итог
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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