Ich verwende die Northwind-Datenbank, um meine SQL-Kenntnisse zu aktualisieren, indem ich einige mehr oder weniger komplexe Abfragen erstelle. Leider konnte ich für meinen letzten Anwendungsfall keine Lösung finden: "Holen Sie sich die Summe der fünf größten Aufträge für jede Kategorie im Jahr 1997."SQL - Unterabfrage in Aggregatfunktion
Die Tabellen beteiligt sind:
Orders(OrderId, OrderDate)
Order Details(OrderId, ProductId, Quantity, UnitPrice)
Products(ProductId, CategoryId)
Categories(CategoryId, CategoryName)
ich die folgende Abfrage
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
Nun versucht haben ... Es stellte sich heraus, dass Unterabfragen sind in Aggregatfunktionen nicht erlaubt. Ich habe andere Beiträge zu diesem Problem gelesen, konnte jedoch keine Lösung für meinen speziellen Anwendungsfall finden. Hoffe, dass Sie mir helfen können ...
Welche Version von RDBMS verwenden Sie? Auch Ihre Frage ist nicht korrekt, da die Bestellung in mehr als einer Kategorie enthalten sein kann. –
Ich verwende MSSQL 2012. Wenn Sie auf die Unterabfrage verweisen, gibt es eine WHERE-Klausel - "WHERE c.categoryID = p2.CategoryID" - die nur nach einer Kategorie filtern soll. – Thomas