假设有一个order
和order_line
表。要计算每个客户的收入,我使用以下查询-
select o.customer_id, sum(o.amount) as revenue
from order o join order_line ol on o.id=ol.order_id
where ol.coupon_code is NULL
group by 1
让我们假设coupon_code
仅在订单行级别可用,因此我们需要加入order_line
。如果一个订单可以有多个订单项,则由于加入,收入总和将被重复计算。
想知道是否有一种方法可以仅针对不同的订单计算amount
的总和。这似乎是一个普通的用例,可能有一个简单的解决方案,但我想不到。
答案 0 :(得分:0)
使用子查询
select o.customer_id, sum(o.amount) as revenue
from "order" o join
( select distinct coupon_code,order_id from order_line
) ol on o.id=ol.order_id
where ol.coupon_code is NULL
group by o.customer_id
答案 1 :(得分:0)
您可以使用EXISTS
代替加入。以下内容将过滤 没有订单项具有优惠券代码 的订单:
select customer_id, sum(amount) as revenue
from order
where not exists (
select 1
from order_line
where order_id = order.id
and order_line.coupon_code is not null
)
group by customer_id