如何在执行 group by 时获得正确的总和,以及随机填充组内行的列上的 where 子句?

问题描述 投票:0回答:1

我有一个包含多列和数千行的“订单表”。每个订单 ID 有多行,“订单值”列大部分为零,每个订单除了 1-2 个之外。现在我需要找到每个订单 ID 的订单价值总和。我可以简单地使用 sum(order_value) 并对 order_id 进行“分组依据”,但问题是我还需要根据两个不同的列过滤掉订单。其中一列(示例数据中的 Filter1 列)中的过滤条件值随机填充,并且订单中的其余行也为零(就像“订单值”列)。因此,当我在 where 子句中添加 Filter1 时,在求和时会使用满足 filter1 条件值的行,但这些行的“顺序值”可能为零(因为“顺序值”也是随机填充的)。

如何获得每个订单的正确总和以及应用的过滤器。 以下是两个 order_id - 6180811 和 6119188 的示例数据:

订单_ID 过滤器1 过滤器2 订单值
6180811 0 0
6180811 888653 0
6180811 0 类型1 0.5
6180811 0 0
6180811 0 0
6180811 0 类型1 13.5
6119188 0 0
6119188 0 0
6119188 0 0
6119188 0 类型2 1.5
6119188 888621 0
6119188 0 类型2 15.5

这是我的示例 SQL:

选择 订单号, sum(order_value) 作为总计 从订单 其中 Filter1 in ('888653','888621') 和 Filter2 in ('类型 1','类型 2') 按 order_id 分组;

预期结果:

订单_id 总计
6180811 14
6119188 17

实际结果:

订单_id 总计
6180811 0
6119188 0
sql database snowflake-cloud-data-platform data-analysis snowflake-schema
1个回答
0
投票

您可能需要进行 JOIN 并根据订单本身的优点以及过滤器本身来预先聚合订单。类似的东西

select
      Totals.*      
   from
      ( select distinct
              order_id
           from
              order
           where
                  Filter1 in ('888653','888621') 
              and Filter2 in ('type 1','type 2') ) Qualified
      JOIN
      ( select 
              order_id,
              sum( order_value ) TotalOrder
           from
              order
           group by
              order_id ) Totals
         on Qualified.Order_id = Totals.Order_id
© www.soinside.com 2019 - 2024. All rights reserved.