如何选择客户名称和平均产品价格

时间:2019-06-24 23:59:16

标签: sql oracle

对于家庭作业问题,我提供了以下表格:

产品 -产品ID(密钥) -产品名称 -产品价格 -VendorID -CategoryID

SoldVia -产品ID(密钥) -TID(FK) -NoOfItems

SalesTransaction -TID(密钥) -TDate -CustomerID(FK) -StoreID(FK)

客户 -CustomerID(密钥) -顾客姓名 -CustomerZip

我应该为每个客户选择CustomerName和平均价格。我对如何仅平均特定客户购买的productID的产品价格感到困惑。

我尝试过:

SELECT Customer.CustomerName, AVG(Product.ProductPrice)
FROM Customer, Product
WHERE Customer.CustomerID = (SELECT CustomerID
                            FROM SalesTransaction
                            WHERE TID = (SELECT TID 
                                        FROM SoldVia
                                        WHERE ProductID = (SELECT ProductID
                                                          FROM Product)));

1 个答案:

答案 0 :(得分:0)

大概是这样的:

select c.customername, 
       sum(sv.noofitems  * p.productprice) / sum(sv.noofitems) as avg_price
from   customer c join salestransaction st on  c.customerid = st.customerid
                  join soldvia          sv on st.tid        = sv.tid
                  join product          p  on sv.productid  =  p.productid
group  by c.customerid
;

这将不会退回根本没买任何东西的客户。如果您还必须包括这些客户(平均价格为NULL-没有其他意义),那么您需要将所有join更改为left outer join

请注意,“平均价格”是加权平均值(通过为每种不同产品购买的单位数量-数量-加权),因此不能 >使用标准的汇总函数avg()进行计算。