对于家庭作业问题,我提供了以下表格:
产品 -产品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)));
答案 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()
进行计算。