#sql #adventureworks
Вопрос:
Я использую базу данных adventureworks 2019 и пытаюсь показать таблицу, которая дает:
Product Name -- AvgListPrice -- AvgStandardCost -- AvgUnitPrice
Цена по прейскуранту = цена RRP, Цена за единицу = цена продажи (включая скидки), стандартная стоимость = стоимость продукта.
Я использую следующий запрос:
SELECT
ProductName,
AvgStandardCost,
AvgListPrice,
AvgUnitPrice,
ROUND(AvgUnitPrice * 100.0 / AvgListPrice, 1) AS PercentDifferenceUnit_List,
ROUND(AvgUnitPrice * 100.0 / AvgStandardCost, 1) AS PercentDifferenceUnit_Cost
FROM
(SELECT
PP.[Name] AS ProductName,
AVG(PP.[ListPrice]) AS AvgListPrice,
AVG(SSOD.[UnitPrice]) AS AvgUnitPrice,
AVG(PP.[StandardCost]) AS AvgStandardCost
FROM
[Sales].[SalesOrderDetail] AS SSOD
INNER JOIN [Production].[Product] AS PP
ON SSOD.[ProductID] = PP.[ProductID]
GROUP BY PP.[Name]
) AS T
WHERE AvgUnitPrice < AvgStandardCost --(AvgUnitPrice < AvgListPrice gives 250 rows)
--(AvgUnitPrice < AvgStandardCost gives 25 rows)
--(Total number of distinct products = 504)
GROUP BY ProductName, AvgListPrice, AvgUnitPrice, AvgStandardCost
Вы можете видеть выше, сколько строк возвращается, когда я изменяю предложение WHERE.
Однако, когда я запускаю эти запросы:
SELECT [Name], [ListPrice] FROM [Production].[Product]
WHERE ListPrice >
(SELECT AVG([UnitPrice]) FROM [Sales].[SalesOrderDetail])
Я получаю здесь 136 строк (в отличие от 250 выше)
SELECT [Name] FROM [Production].[Product]
WHERE StandardCost >
(SELECT AVG([UnitPrice]) AS AvgUnitPrice FROM [Sales].[SalesOrderDetail])
Здесь я получаю 98 строк (в отличие от 25 выше)
Я попытался написать запрос, чтобы проверить, совпадает ли avgStandardCost со стандартом (я почти уверен, что для каждого продукта есть только одно значение standardcost и listprice), но, похоже, я не могу заставить его работать.
Итак, в чем причина различий в строках?
Спасибо!
Комментарии:
1. Эти запросы определенно не являются логически эквивалентными. Ваш второй запрос принимает среднее значение всех продуктов, в то время как первый сравнивает среднее значение внутри продукта.
2. Спасибо за понимание, Серг!