powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Произведение нарастающим итогом
5 сообщений из 5, страница 1 из 1
Произведение нарастающим итогом
    #39638155
Roomon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Подскажите, пожалуйста, как можно создать столбец с произведением предыдущих чисел из соседнего столбца внутри своего ID.

Условно говоря, есть таблица из 3 столбцов ID, Period, Value и нужно добавить 4-й столбец New:

ID Period Value New1 1 2 21 2 3 61 3 4 241 4 5 1202 1 3 32 2 5 152 3 8 1202 4 9 1080

И в общем случае вопрос. Возможно ли заполнять столбец ссылаясь на предыдущее значение в этом же столбце? (то есть чтобы столбец New считался не на основе текущего и всех предыдущих значений в столбце Value, а на основе одного значения в столбце Value и одного предыдущего значения в столбце New). Спасибо.
...
Рейтинг: 0 / 0
Произведение нарастающим итогом
    #39638157
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классический вариант не?
Код: 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.
SQL> 
with t(ID,  Period, Val, expected_val) as (select 1, 1, 2, 2
from dual union all select 1, 2, 3, 6
from dual union all select 1, 3, 4, 24
from dual union all select 1, 4, 5, 120
from dual union all select 2, 1, 3, 3
from dual union all select 2, 2, 5, 15
from dual union all select 2, 3, 8, 120
from dual union all select 2, 4, 9, 1080
from dual )
------------------------------------------------
select id, period, val
     , power(10,sum(log(10,val)) over(partition by id order by period)) new_val
from t
;
        ID     PERIOD        VAL    NEW_VAL
---------- ---------- ---------- ----------
         1          1          2          2
         1          2          3          6
         1          3          4         24
         1          4          5        120
         2          1          3          3
         2          2          5         15
         2          3          8        120
         2          4          9       1080
8 rows selected

SQL> 
...
Рейтинг: 0 / 0
Произведение нарастающим итогом
    #39638180
Roomon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, спасибо. Как-то не подумал про логарифм.. )

А при таком вычисление скажем на 1 млн строк без учета partition by (то есть если будет 1 млн разных значений, по которым будет делаться order by) СУБД будет учитывать расчет для предыдущей строчки? Или для строки 999 999 будет считаться произведение 999 999 значений, а для строки 1 000 000 будет заново считаться произведение 1 млн значений соответственно? (вопрос про быстродействие)
...
Рейтинг: 0 / 0
Произведение нарастающим итогом
    #39638201
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roomon(вопрос про быстродействие)explain plan
...
Рейтинг: 0 / 0
Произведение нарастающим итогом
    #39638426
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roomonа для строки 1 000 000 будет заново считаться произведение 1 млн значений соответственно? (вопрос про быстродействие)Не волнуйся, до этой строки не дойдёт.
Код: plsql
1.
select power(2, 1e6) from dual;

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


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