【发布时间】:2021-07-05 01:10:21
【问题描述】:
我是新来发布表格视图,所以我将尝试解释我的数据的外观: 我有客户 ID、订单 ID、销售日期、购买的产品以及产品的价格。我们销售 3 种产品:K、N 和 E。每行显示客户购买的产品及其价格。客户可以在同一订单中多次购买同一产品,也可以购买其他产品。下面我试图汇总每个产品的价格,这样最后我将为每个客户和订单创建一个列,并创建新的价格列。
目前正在编写 CTE:
with N as (select Customer_ID, Order_ID, Sales_Date,
sum(Price)
from orders
group by 1,2,3
where product = 'N'),
K as (select Customer_ID, Order_ID, Sales_Date,
sum(Price)
from orders
group by 1,2,3
where product = 'K'),
E as (select Customer_ID, Order_ID, Sales_Date,
sum(Price)
from orders
group by 1,2,3
where product = 'E')
select N.*,
K.Price as K_Price,
E.Price as E_Price
from N as N
left join K as K on K.Customer_ID=N.Customer_ID
left join E as E on E.Customer_ID=N.Customer_ID
有没有更有效的方法来做到这一点?如果产品选项从 3 个增加到 20 个 - 我将有 20 个 CTE,也许以不同的方式编写查询会更好?
【问题讨论】:
-
不要解释数据是什么样的。包括样本数据和期望的结果。清楚地解释你想要做什么也会有所帮助。我假设您的意思是每个客户有一个 行,每个价格都有一个单独的列。
标签: sql postgresql aggregate aggregate-functions where-clause