Я использую базу данных Northwind, чтобы освежить свои навыки SQL, создавая более или менее сложные запросы. К сожалению, я не смог найти решение для моего последнего варианта использования: «Получите сумму пяти самых больших заказов для каждой категории в 1997 году».
Используемые таблицы:
Orders(OrderId, OrderDate)
Order Details(OrderId, ProductId, Quantity, UnitPrice)
Products(ProductId, CategoryId)
Categories(CategoryId, CategoryName)
Я пробовал следующий запрос
SELECT c.CategoryName, SUM(
(SELECT TOP 5 od2.UnitPrice*od2.Quantity
FROM [Order Details] od2, Products p2
WHERE od2.ProductID = p2.ProductID
AND c.CategoryID = p2.CategoryID
ORDER BY 1 DESC))
FROM [Order Details] od, Products p, Categories c, Orders o
WHERE od.ProductID = p. ProductID
AND p.CategoryID = c.CategoryID
AND od.OrderID = o.OrderID
AND YEAR(o.OrderDate) = 1997
GROUP BY c.CategoryName
Ну... Оказалось, что в агрегатных функциях нельзя использовать подзапросы. Я читал другие сообщения об этой проблеме, но не смог найти решение для моего конкретного случая использования. Надеюсь, вы сможете мне помочь...
WHERE c.categoryID = p2.CategoryID
— которое должно фильтровать только по одной категории. - person Thomas   schedule 01.05.2013