【发布时间】:2019-07-18 00:50:15
【问题描述】:
我有一个包含客户、产品和类别的购买数据集。
customer product category sales_value
A aerosol air_care 10
B aerosol air_care 12
C aerosol air_care 7
A perfume air_care 8
A perfume air_care 2
D perfume air_care 11
C burger food 13
D fries food 6
C fries food 9
对于每种产品,我想要至少购买该产品一次的客户在该产品上花费的销售价值与在该产品类别上花费的销售价值之间的比率。
另一种说法:以至少购买一次fries 的客户为例,计算 A)在fries 上花费的销售额总和 B)在 @ 上花费的销售额总和987654324@.
中间表的格式如下:
product category sum_spent_on_product sum_spent_on_category ratio
by_people_buying_product
aerosol air_care 29 39 0.74
perfume air_care 21 31 0.68
burger food 13 22 0.59
fries food 15 28 0.53
示例:人们至少购买过一次aerosol,在该产品上总共花费了 1800。总体而言,同一个人在air_care 类别(aerosol 所属)上花费了 3600。因此,aerosol 的比率为 0.5。
我尝试使用left join lateral 解决此问题并计算每个product 的给定中间结果,但我无法弄清楚如何包含条件only for customers who bought this specific product:
select
distinct (product_id)
, category
, c.sales_category
from transactions t
left join lateral (
select
sum(sales_value) as sales_category
from transactions
where category = t.category
group by category
) c on true
;
上面的查询列出了每个产品在产品类别上的花费总和,但没有所需的产品购买者条件。
left join lateral 是正确的方法吗?普通 SQL 中还有其他解决方案吗?
【问题讨论】:
-
我看不出你的第二个样本数据表与第一个有什么关系。
标签: sql postgresql lateral-join