Oracle: рассчитать процент и обновить таблицу - PullRequest
0 голосов
/ 08 января 2019

Моя таблица выглядит следующим образом

id | SomeValue | count | percentage
1  | plum      | 9     |
2  | apple     | 2     |
3  | banana    | 10    |
4  | orange    | 8     |

Я хочу рассматривать только строки с id> = 2. Процент для яблока должен быть 2 / (2 + 10 + 8) = 0,1

Тот же метод применяется ко всем строкам.

Я могу получить сумму с

select sum(count) from table1 where id>=2

для обновления в процентах, в настоящее время у меня есть

update table1 
set percentage=count/(select sum(count) 
                      from table1 
                      where id>=2) 
where id>=2

Это работает для моей цели, но я думаю, что пересчитывает сумму для каждой строки (поправьте меня, если я ошибаюсь), и это не очень эффективно. Пожалуйста, помогите мне сделать это максимально эффективным. Я должен обновить до миллиона записей. Спасибо.

1 Ответ

0 голосов
/ 08 января 2019

В оракуле не пересчитывается

Вот пример:

create table t1 (
  col1 number
  );

INSERT INTO t1
SELECT
  null col1
FROM  dual
CONNECT BY level <= 50;

CREATE table t2 as select * from t1;

UPDATE T1
SET COL1 = dbms_random.value(0, 1000); 

UPDATE t2
SET  col1 = (select dbms_random.value(0, 1000) from dual);

Где

SELECT * from T1;  --Gives random output

SELECT * from T2;  --Only randomize first time.

Проверка DbFiddle Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...