用于执行聚合和计算百分比的 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 - 计算嵌套聚合相对于父存储桶的百分比

查找 SQL 聚合函数调用中的百分比可能没有嵌套聚合或窗口函数

SQL Server中协助计算百分比

在计算百分比时将 Over() 与聚合函数一起使用

计算查询中的百分比 - Access SQL

Mongodb查询聚合和Groupby复杂过滤、求和、百分比查询