sql - 使用预聚合数据更新事务
问题描述
我有一个交易表。我需要使用另一个表中的预聚合值更新表,然后将这些值滚动到不同的粒度级别。
但是,最终输出不正确。希望这里有人可以帮助我弄清楚如何解决这个问题。
Table A:
TransID BankName Location Region SaleType MonthlyPayment Weight
1 BOA Boston East F 3000 3
2 Mellon Pittsburgh East C 1000 3
3 BOA Boston East C 2000 2
4 BOA Boston East 1000 2
Table B
BanKname Location Region Sales
BOA Boston East 500
Mellon Pittsburgh East 1000
Desired Output structure
BankName Location Region SaleType AvgSales AvgMonthlyPayment
问题是,在更新和进行加权平均时,波士顿的每笔交易都获得了 500 笔销售额。添加后,总销售额应为 1500,但现在为 2500。
如果我使用表 B 中的销售值更新表 A,则每个销售类型的销售都会重复 - 所以它会抛出最终的平均销售。
update is this: (Added new column sales in A)
update a
set a.sales = b.sales
from tableA a join tableB b on a.bankname=b.bankname and
a.location=b.location and a.region = b.region
weighted average from A is calculated like this:
select bankname,location,region,saletype,
sum(case when sales is not null then sales*weight else 0
end)/sum(weight) as avgsales
, sum(case when monthlypayment is not null then monthlypayment*weight
else 0 end)/sum(weight) as avgmonthlyp
from tableA
group by bankname,location,region,saletype
对于每个销售类型,销售都会更新价值,从而将最终价值增加该倍。
如何更新销售额,使 BOA 仅获得 500,Mellon 仅获得 1000,总销售额为 1500?
解决方案
推荐阅读
- json - Python列表到多级json
- c# - 使用 C# 将变量传递到 excel VBA,然后运行 VBA 脚本
- php - How to Hide Mysql Records in PHP page Every 23 Hours?
- sql - 通过在 SQL plus 中输入两个值来搜索第三列
- vb.net - 当类型是值类型时,可以将 null 传递给泛型函数
- javascript - JavaScript 中的 Excel 导出无法使用 Blob
- mysql - 在 mysql 中查找特定的约束
- r - 交叉验证帮助:模型中的错误。
- r - R:组合两组数字
- javascript - 通过 map 对多个元素反应 refs