用于执行聚合和计算百分比的 SQL 查询
Posted
技术标签:
【中文标题】用于执行聚合和计算百分比的 SQL 查询【英文标题】:SQL Query to perform aggregate and calculate percentage 【发布时间】:2021-03-31 02:06:08 【问题描述】:这就是我想要做的。我有三张桌子。我已经创建的表 A、表 B 和表 C。我需要一个应该在表 D 中返回结果的查询。
表 D 中的 total_order 列是表 B 和表 C 中特定 id 的所有 b_type 和 c_type 的总和
列百分比是我们从列 totalR 和 total_order (14/3*100 = 466.66) 计算百分比的地方。
表 D 中的前三列来自表 A
【问题讨论】:
id是主键,我们可以用id链接它们 是的,没错 【参考方案1】:好的,你可以这样做:
select
A.id,
A.type,
A.totalR,
case A.type when 'Q' then sum(B.b_typeQ) + sum(C.c_typeQ)
when 'QQ' then sum(B.b_typeQQ) + sum(C.c_typeQQ)
when 'K' then sum(B.b_typeK) + sum(C.c_typeK)
end totalOrder,
case A.type when 'Q' then sum(B.b_typeQ) + sum(C.c_typeQ)
when 'QQ' then sum(B.b_typeQQ) + sum(C.c_typeQQ)
when 'K' then sum(B.b_typeK) + sum(C.c_typeK)
end * 100.00 / totalR as percentage
from
tableA A
join TableB B on A.id = B.Id
join TableC C on A.id = C.Id
group by
A.id,
A.type,
A.totalR
【讨论】:
谢谢,我还没试过,我的机器有问题,只是一个简单的问题, sum(B.b_typeQ) + sum(C.c_typeQ) 是否会添加来自不同行的所有数字在 b_typeQ 和 c_typeQ 列下用于 id aa 还是所有 id? 不,它们是按 id 分组的,所以它总结了每个组中的数字,当然每个类型也被 case 语句过滤 它适用于我在问题中提到的表格。谢谢。但我注意到我的数据有点不同,如果没有,我会尝试然后发布另一个问题。以上是关于用于执行聚合和计算百分比的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比