Получите самый кассовый продукт для каждого отдельного поставщика - PullRequest
0 голосов
/ 19 октября 2019

Как мне получить продукт с наибольшей прибылью для каждого отдельного продавца?

Я до сих пор придумал это и, похоже, не могу продолжить.

select vendor.Vendor_Name, Product.category AS Product
  , SUM(SalesFacts.Price * SalesFacts.Quantity) AS [Total Revenue]
FROM Vendor, Product, SalesFacts
WHERE SalesFacts.Vendor_Key = Vendor.Vendor_Key
AND SalesFacts.Product_Key = Product.Product_Key
GROUP BY vendor.Vendor_Name, product.Category
ORDER BY [Total Revenue] DESC;

Vendor Table

Product Table

Sales Table

(Product_Key и Vendor_Key - внешний ключ)

Ответы [ 3 ]

0 голосов
/ 19 октября 2019

Вы можете использовать это.

SELECT * FROM (
    SELECT 
        vendor.Vendor_Name, 
        Product.Category AS Product,
        ROW_NUMBER() OVER(PARTITION BY vendor.Vendor_Name ORDER BY SUM(SalesFacts.Price * SalesFacts.Quantity)  DESC) RN
    FROM Vendor
        INNER JOIN SalesFacts ON SalesFacts.Vendor_Key = Vendor.Vendor_Key
        INNER JOIN Product ON SalesFacts.Product_Key = Product.Product_Key 
    GROUP BY vendor.Vendor_Name, product.Category   
) X
WHERE X.RN = 1
0 голосов
/ 19 октября 2019

Я не понимаю, почему «категория» должна быть продуктом. Что еще более важно, вы должны исправить свой запрос:

  • Никогда не используйте запятые в предложении FROM.
  • Всегда используйте правильное, явно, стандартный JOIN синтаксис.
  • Использовать значимые псевдонимы таблиц.

На уровне product это будет:

SELECT Vendor_Name, Product
FROM (SELECT v.Vendor_Name, p.Description AS Product,
             ROW_NUMBER() OVER (PARTITION BY v.Vendor_Key ORDER BY SUM(sf.Price * sf.Quantity) DESC) as seqnum
      FROM SalesFacts sf JOIN
           Vendor v
           ON sf.Vendor_Key = v.Vendor_Key JOIN
           Product p
           ON sf.Product_Key = p.Product_Key 
      GROUP BY v.Vendor_Key, v.Vendor_Name, p.Product_Key, p.Description   
     ) vp
WHERE vp.seqnum = 1;

Это можно легко изменить для работы с категорией, но в вопросе говорится "продукт", и в данных есть что-то, что соответствует этому.

0 голосов
/ 19 октября 2019
 select vendor.Vendor_Name,Product.category AS Product,
       MAX(SalesFacts.Price * SalesFacts.Quantity) OVER (PARTITION BY 
          SalesFacts.Vendor_Key,SalesFacts.Product_Key ORDER BY SalesFacts.Vendor_Key ) AS 
          [Total Revenue] FROM Vendor
      ,Product,SalesFacts WHERE SalesFacts.Vendor_Key = Vendor.Vendor_Key AND 
    SalesFacts.Product_Key = Product.Product_Key 
  --GROUP BY vendor.Vendor_Name,product.Category,SalesFacts.Price,SalesFacts.Quantity
   ORDER BY [Total Revenue] DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...