在 SQL 中求和

Posted

技术标签:

【中文标题】在 SQL 中求和【英文标题】:Sum distinct in SQL 【发布时间】:2019-02-06 09:07:04 【问题描述】:

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

【问题讨论】:

向我们展示一些示例表数据和预期结果 - 都是格式化文本,而不是图像。并且不要忘记拥有不同的 coupon_code 状态。 订单的所有 ol.coupon_code 值是否相同? 您是否要排除包含 1 个/多个 coupon_code 的订单? 【参考方案1】:

使用子查询

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

【讨论】:

以上是关于在 SQL 中求和的主要内容,如果未能解决你的问题,请参考以下文章

sql sum求和,如果为空显示为0

SQL累计求和的优化

在 SQL 中求和

如何在 SQL 中添加(求和)列数据

Kibana两个字段求和

在sql中求和