SQL-запрос для получения максимальных значений на основе одного столбца путем группировки по другому столбцу - PullRequest
0 голосов
/ 10 июля 2019

Я выполняю следующий запрос SQL, чтобы выбрать продукт с наивысшей ценой в каждой категории продуктов в https://www.w3schools.com/sql/trysql.asp

SELECT  p.ProductID, p.productName, p.Price, p.CategoryID, c.CategoryName
FROM [Categories] c
LEFT JOIN [Products] p
ON (c.CategoryID = p.CategoryID)
WHERE Price IN (SELECT Max(Price) FROM Products GROUP BY CategoryID)
ORDER BY p.CategoryID

Однако сгенерированный вывод дает 2 результата для некоторых категорий, таких как категории 3 и 4. Почему это происходит? и как я могу изменить код, чтобы получить только самый высокий результат для каждого? Кроме того, как получить самый низкий показатель для каждой категории?

Ответы [ 2 ]

1 голос
/ 10 июля 2019

APPLY приходит на ум как, возможно, самый простой подход:

SELECT p.ProductID, p.productName, p.Price, p.CategoryID, c.CategoryName
FROM categories c OUTER APPLY
     (SELECT TOP (1) p.*
      FROM Products p
      WHERE p.CategoryID = c.CategoryID
      ORDER BY p.Price DESC
     ) p
ORDER BY c.CategoryID
1 голос
/ 10 июля 2019

использование row_number()

   slect a.* from (SELECT  p.ProductID, p.productName, p.Price, p.CategoryID, c.CategoryName,
      row_number()over(partition by p.CategoryID order by p.Price desc) rn
    FROM [Categories] c
    LEFT JOIN [Products] p
    ON c.CategoryID = p.CategoryID
    ) a where a.rn=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...