Как выбрать CustomerName и средний ProductPrice - PullRequest
1 голос
/ 25 июня 2019

Для домашней работы у меня есть следующие таблицы:

Продукт -ProductID (Key) -Наименование товара -Цена продукта -VendorID -CategoryID

SoldVia -ProductID (Key) -TID (ФК) -NoOfItems

SalesTransaction -TID (Key) -TDate -CustomerID (ФК) -StoreID (ФК)

Клиент -CustomerID (Key) -Имя покупателя -CustomerZip

И я должен выбрать CustomerName и среднюю цену для каждого клиента. Меня смущает, как усреднять только цены продуктов из идентификаторов продуктов, которые купил конкретный клиент.

Я пробовал это:

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 голосов
/ 25 июня 2019

Вероятно, что-то вроде этого:

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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...