我的桌子如下所示
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
这对我来说有用,但是我认为它会重新计算每一行的总和(如果我错了,请更正我),而且效率不是很高。请帮助我使此工作尽可能高效。我必须更新多达一百万条记录。谢谢。
答案 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);