我正在尝试使用更新来计算权重。在特定情况下,我需要应用分组,因为负担需要按客户端 ID 分配。但这里的分组无法正常工作。必须使用更新
结果
预期结果:预期结果是根据客户ID和持股量按权重分配0.14/0.14/1/0.71
CREATE TABLE VALUE_TBL
( CLIEND_ID NUMBER(10),
VALUE NUMBER,
WEIGHT NUMBER,
HOLDINGS VARCHAR(50)
);
insert into value_tbl1(cliend_id,value,WEIGHT,HOLDINGS) values(1,10,33.33,'GOOGLE');
insert into value_tbl1(cliend_id,value,WEIGHT,HOLDINGS) values(1,10,33.33,'AAPL');
insert into value_tbl1(cliend_id,value,WEIGHT,HOLDINGS) values(2,30,100,'ABB');
insert into value_tbl1(cliend_id,value,WEIGHT,HOLDINGS) values(1,50,33.33,'TESLA');
我尝试了以下更新,但没有成功
update value_tbl y
set weight = value /
(select sum(value)
from value_tbl x
group by x.cliend_id)
您的子查询将为每个 ID 返回一行,而不仅仅是您要更新的 ID 的总数。作为相关更新,它看起来像:
这不是您显示的结果。要获得这些百分比,您需要使用计数,然后除以 100,而不是
value
:小提琴
您可以使用 round、floor/ceil 或 trunc 函数将结果限制为小数点后两位,或者更改列定义以仅存储小数点后两位。