我正在尝试使用更新来计算重量。 在特定情况下,我需要应用分组,因为负担需要按客户端 ID 分配。 但这里的分组无法正常工作。 必须使用更新
结果
预期结果: 预期结果是已分配 根据客户 ID 和持有量按权重计算
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 的总数。作为相关更新,如下所示:
update value_tbl y
set weight = y.value /
(select sum(x.value)
from value_tbl x
where x.cliend_id = y.cliend_id)
CLIEND_ID | 价值 | 重量 | 控股 |
---|---|---|---|
1 | 10 | .1428571428571428571428571428571428571429 | 谷歌 |
1 | 10 | .1428571428571428571428571428571428571429 | AAPL |
2 | 30 | 1 | ABB |
1 | 50 | .7142857142857142857142857142857142857143 | 特斯拉 |
这不是您显示的结果。要获得这些百分比,您可以使用计数并除以 100,而不是
value
:
update value_tbl y
set weight = 100 /
(select count(*)
from value_tbl x
where x.cliend_id = y.cliend_id)
CLIEND_ID | 价值 | 重量 | 控股 |
---|---|---|---|
1 | 10 | 33.33333333333333333333333333333333333333 | 谷歌 |
1 | 10 | 33.33333333333333333333333333333333333333 | AAPL |
2 | 30 | 100 | ABB |
1 | 50 | 33.33333333333333333333333333333333333333 | 特斯拉 |
您可以使用 round、floor/ceil 或 trunc 函数将结果限制为两位小数,或更改列定义以仅存储两位小数。