Oracle:计算百分比并更新表

时间:2019-01-08 08:07:34

标签: oracle

我的桌子如下所示

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 :(得分:2)

在oracle中不会重新计算

这里是一个例子:

text-shadow

哪里

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);

Check DbFiddle Link