分享

Update语句中使用聚合函数Sum

 昵称2548375 2018-11-27
 -转
sql update语句
UPDATE — 替换表中列/字段的数值

语法

UPDATE table SET col = expression [, ...]
     [ FROM fromlist ]
     [ WHERE condition ]

输入

table
现存表的名称.
column
table 中列/字段的名.
expression
赋予列/字段的一个有效的值或表达式.
fromlist
Postgres 的一个非标准的扩展,允许别的表中的列/字段出现在 WHERE 条件里.
condition
请参考 SELECT 语句获得 WHERE 子句的进一步描述.

输出

UPDATE #
成功的返回信息.# 意味着更新的行数.如果 # 等于 0 则没有行被更新.

描述

UPDATE 改变满足条件的所有行的声明了的列/字段的值。只有要更改的列/字段需要在语句中出现.

数组引用使用与 SELECT 里一样的语法.也就是说,单个数组元素,数组元素的一个范围或者是整个数组都可以用一个查询语句更新.

要更改表,你必须对它有写权限,同样对 WHERE 条件里提到的任何表也要有读权限

 
 
表warehousestorage
WarehouseID Amount
1 100
1 100
1 100
1 100
1 100
1 100
1 100
1 100
1 28
1 0
1 100
4 14788
4 100
4 100
4 100
4 100
4 100
4 100d
1 100

表warehouse
WarehouseID UsingCapacity
1 1028
2 0
3 0
4 15388
5 0

表warehouse中的UsingCapacity是表warehousestorage对应项的累加值

SQL语句:
update warehouse set UsingCapacity = c.amount
from (select Sum(amount) as 'amount' , warehouseid from warehousestorage group by warehouseid) c, warehouse
where warehouse.warehouseid = c.warehouseid


运行后,统计值正确。不过又发现一个问题,因为表warehousestorage累加后,只有2项,而表warehouse有5项
,上述代码只更新了WareHouseID=1,4的2项,其他并没有更新。
所以代码需要修改:
update warehouse set UsingCapacity = d.amount
from
(
 select wh.warehouseid, isnull(c.amount,0) as 'amount' from
 (select Sum(amount) as 'amount' , warehouseid from warehousestorage group by warehouseid) c right join warehouse wh
 on c.warehouseid = wh.warehouseid
) d,warehouse
where warehouse.warehouseid = d.warehouseid

修改后,可以正常更新其余的几项。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多