对于每种奖励类型,我试图计算存款中包含该类型奖励的平均次数。它的一个限制是,不包括奖励类型的存款不会对该类型的平均值做出贡献,而不是 0。
架构如下:
rewards(rewardId, rewardType, rewardValue);
deposit(depositId, depositDate, customerId);
details(depositId, rewardsId, numDeposit);
这是我的查询:
select r.rewardsId, avg(dep.depositId)
from deposit dep join details det
on dep.depositId = det.depositId join rewards r
on r.rewardsId = det.rewardsId
group by r.rewardsId;
我得到的答案似乎不正确,因为平均值非常高,但当我手动计算时,每个 rewardType 大约有 2 个。有人可以指出我做错了什么吗?
最佳答案
由于您只想计算包含奖励类型的存款,那么您可以这样计算它们:
select t.rewardsId, avg(t.counter) from (
select
r.rewardsId,
sum(case when det.rewardsId is null then 0 else 1 end) counter
from deposit dep join details det
on dep.depositId = det.depositId join rewards r
on r.rewardsId = det.rewardsId
group by r.rewardsId, dep.depositId
) t
group by t.rewardsId
关于sql - 计算每种奖励类型的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55093522/