我有一个包含多列和数千行的“订单表”。每个订单 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 |
您可能需要进行 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