SQL中的总和

时间:2019-02-06 09:07:05

标签: sql google-bigquery

假设有一个orderorder_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的总和。这似乎是一个普通的用例,可能有一个简单的解决方案,但我想不到。

2 个答案:

答案 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