在更新查询中使用 Group By

问题描述 投票:0回答:1

我正在尝试使用更新来计算重量。 在特定情况下,我需要应用分组,因为负担需要按客户端 ID 分配。 但这里的分组无法正常工作。 必须使用更新

结果

enter image description here

预期结果: 预期结果是已分配 根据客户 ID 和持有量按权重计算

enter image description here

    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)
oracle19c
1个回答
0
投票

您的子查询将为每个 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 函数将结果限制为两位小数,或更改列定义以仅存储两位小数。

© www.soinside.com 2019 - 2024. All rights reserved.