sql - 计算每种奖励类型的平均值
问题描述
对于每种奖励类型,我都在尝试计算该类型奖励被包含在存款中的平均次数。对其的一个限制是,不包括奖励类型的存款不会对该类型的平均值做出贡献,而不是 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 个。有人可以指出我做错了什么吗?
解决方案
您绝对不想要 id 列的平均值。那是没有意义的。
您可能只想count(*)
:
select r.rewardsId, count(*) as num_rewards
from details det join
rewards r
on r.rewardsId = det.rewardsId
group by r.rewardsId;
据我所知,你不需要这张deposit
桌子。存款 ID 在详细信息中。
或者,如果您想要每次存款的奖励:
select r.rewardsId,
count(*) * 1.0 / count(distinct det.depositId) as num_rewards
from details det join
rewards r
on r.rewardsId = det.rewardsId
group by r.rewardsId;
推荐阅读
- android - 如何在android中为夜间模式指定RTL可绘制文件夹名称
- php - 面临循环问题和php中断
- node.js - react中如何根据链接加载资源
- firebase - Authenticated Cloud Run 实例是否原生支持 Firebase 身份验证?
- c - 阐明 GNU C 库如何定义不可重入函数
- node.js - 运行 Buffer(.exe) 而不在 Nodejs 中写入文件
- regex - 为什么带有 perl 正则表达式的 git-log 负后视会导致致命错误?
- asp.net - 如何在文本框中自动获取asp.net web表单中的财政年度
- java - 使用 JAVA 在 S3 存储桶上放置/读取文件
- c++ - 有什么办法可以让这个模板在 cpp 中工作吗?