【问题标题】:SQL Query to perform aggregate and calculate percentage用于执行聚合和计算百分比的 SQL 查询
【发布时间】: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链接它们
  • 是的,没错

标签: sql postgresql hive amazon-redshift


【解决方案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 语句过滤
  • 它适用于我在问题中提到的表格。谢谢。但我注意到我的数据有点不同,如果没有,我会尝试然后发布另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 2013-11-01
  • 2014-04-06
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多