【问题标题】:calculate partition from two table and using index less than or equals of index in bigquery从两个表计算分区并在bigquery中使用小于或等于索引的索引
【发布时间】:2021-04-03 13:46:22
【问题描述】:

我有 2 个表,第一个表是一个主表,我想加入并将分区总和到第二个表。

第一个表是:main_table

Month Product MOB
2020-12-01 B2B 1
2020-12-01 B2B 2
2021-01-01 B2B 1
2020-11-01 B2C 1
2020-11-01 B2C 2
2020-11-01 B2C 3

第二个表是:second_table

month Product MOB amount
2020-12-01 B2B 0 100
2020-12-01 B2B 2 100
2021-01-01 B2B 1 50
2020-11-01 B2C -2 50
2020-11-01 B2C 1 55
2020-11-01 B2C 3 100

我的预期结果是

Month Product MOB partition_amount
2020-12-01 B2B 1 100
2020-12-01 B2B 2 200
2021-01-01 B2B 1 50
2020-11-01 B2C 1 105
2020-11-01 B2C 2 105
2020-11-01 B2C 3 205

partition_amount 的计算方法是当 main_table.Month=second_table.Month 和 main_table.product=second_table.product 时,partition 是 second_table.amount 的 mob 之和。它将在 second_table.mob 时计算

谁能帮我写查询使用大查询?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    它将在 second_table.mob

    一种方法是join 和聚合:

    select m.month, m.product, m.mob, sum(s.partition_amount)
    from main_table m join
         second_table s
         on s.month = m.month and
            s.product = m.product and
            s.mob <= m.mob
    group by 1, 2, 3;
    

    【讨论】:

      【解决方案2】:

      考虑下面

      select any_value(main_table).*,
        sum(if(second_table.mob <= main_table.mob, amount, 0)) as partition_amount
      from `project.dataset.main_table` main_table
      left join `project.dataset.second_table` second_table
      using(month, product)
      group by format('%t', main_table)    
      

      如果应用于您问题中的样本数据 - 输出是

      【讨论】:

        猜你喜欢
        • 2013-05-27
        • 1970-01-01
        • 2011-04-18
        • 2012-01-14
        • 2011-12-19
        • 2016-07-03
        • 2023-04-11
        • 2016-04-01
        相关资源
        最近更新 更多