Sql 如何使用Group by和Sum更新表格
数据表Sql 如何使用Group by和Sum更新表格,sql,postgresql,sql-update,Sql,Postgresql,Sql Update,数据表 |id | sysid | |1 | 938 | |2 | 938 | |3 | 23 | 这是我想要的更新表 |id|amount|sum_amount| |1 |200| 200+400 | |2 |400| 400+200 | |3 |150| 150 | 问题:- UPDATE update_table SET sum_amount = SUM(amount) WHERE data_table.id = upda
|id | sysid |
|1 | 938 |
|2 | 938 |
|3 | 23 |
这是我想要的更新表
|id|amount|sum_amount|
|1 |200| 200+400 |
|2 |400| 400+200 |
|3 |150| 150 |
问题:-
UPDATE update_table
SET sum_amount = SUM(amount)
WHERE data_table.id = update_table.id
GROUP BY data_table.sysid;
错误是“组”处或附近的语法错误,CTE返回总和:
with cte as (
select
sum(amount) sum_amount,
',' || string_agg(cast(d.id as varchar), ',') || ',' ids
from data_table d inner join update_table u
on u.id = d.id
group by d.sysid
)
update update_table u
set sum_amount = c.sum_amount
from cte c
where c.ids like '%,'|| cast(u.id as varchar) || ',%'
请参阅。结果:
使用返回总和的CTE:
with cte as (
select
sum(amount) sum_amount,
',' || string_agg(cast(d.id as varchar), ',') || ',' ids
from data_table d inner join update_table u
on u.id = d.id
group by d.sysid
)
update update_table u
set sum_amount = c.sum_amount
from cte c
where c.ids like '%,'|| cast(u.id as varchar) || ',%'
请参阅。结果:
一种选择是在子查询中连接包含
总和(金额)
聚合的表,并通过公共表表达式将结果反映到update语句中:
with d as
(
select * from
(
select d.sysid, sum(u.amount)
from data_table d
join update_table u on u.id = d.id
group by d.sysid
) q1
right join data_table q2
on q1.sysid=q2.sysid
)
update update_table u
set sum_amount = d.sum
from d
where u.id = d.id
returning u.*;
id amount sum_amount
1 200 600
2 400 600
3 150 150
一个选项是在子查询中连接包含
总和(金额)
聚合的表,并通过公共表表达式将结果反映到update语句中:
with d as
(
select * from
(
select d.sysid, sum(u.amount)
from data_table d
join update_table u on u.id = d.id
group by d.sysid
) q1
right join data_table q2
on q1.sysid=q2.sysid
)
update update_table u
set sum_amount = d.sum
from d
where u.id = d.id
returning u.*;
id amount sum_amount
1 200 600
2 400 600
3 150 150
谢谢,我在问题中键入了一些错误,更新表不包含sysid,因此我可以使用id吗?UPDATE UPDATE_表而不是data_表UPDATE_表是另一个表吗?如果是,为什么要更新?你需要插入。是的,这是另一个不同的表。我已经计算了update_表中的金额,然后我需要根据data_表汇总金额。我更正了问题中的表。Update_表的id行与data_表的id行相同,我尝试了您的代码,但每行的编号都相同。我想因为我在错误的数据源表上误导了你,你做了什么?您完全更改了表的架构?谢谢,我在问题中键入了一些错误,update_表不包含sysid,所以我可以使用id吗?UPDATE UPDATE_表而不是data_表UPDATE_表是另一个表吗?如果是,为什么要更新?你需要插入。是的,这是另一个不同的表。我已经计算了update_表中的金额,然后我需要根据data_表汇总金额。我更正了问题中的表。Update_表的id行与data_表的id行相同,我尝试了您的代码,但每行的编号都相同。我想因为我在错误的数据源表上误导了你,你做了什么?您完全更改了表的架构?为什么要查询
更新
?这不会返回您可能分组的任何数据。它只有与SELECT
结合使用才能真正检索数据。。然后您可以对它进行分组为什么要查询更新
?这不会返回您可能分组的任何数据。它只有与SELECT
结合使用才能真正检索数据。。然后你可以把它分组