Utilizzo il database northwind per aggiornare le mie competenze SQL creando alcune query più o meno complesse. Purtroppo non sono riuscito a trovare una soluzione per il mio ultimo caso d'uso: "Ottieni la somma dei cinque ordini migliori per ogni categoria nell'anno 1997."SQL - Sottoquery in funzione aggregata
Le tabelle coinvolte sono:
Orders(OrderId, OrderDate)
Order Details(OrderId, ProductId, Quantity, UnitPrice)
Products(ProductId, CategoryId)
Categories(CategoryId, CategoryName)
Ho provato la seguente query
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
Beh ... Si è scoperto che sottoquery non sono ammessi nelle funzioni di aggregazione. Ho letto altri post su questo problema ma non sono riuscito a trovare una soluzione per il mio caso d'uso specifico. Spero che tu possa darmi una mano ...
Quale versione di RDBMS stai utilizzando? Anche la tua domanda non è corretta perché l'ordine può appartenere a più di una categoria. –
Sto utilizzando MSSQL 2012. Se si fa riferimento alla sottoquery, esiste una clausola WHERE - 'WHERE c.categoryID = p2.CategoryID' - che dovrebbe filtrare solo per una categoria. – Thomas