Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL - Sottoquery nella funzione di aggregazione

Le sottoquery non sono generalmente consentite nelle funzioni aggregate. Sposta invece l'aggregato all'interno la sottoquery. In questo caso, avrai bisogno di un ulteriore livello di sottoquery a causa dei top 5 :

SELECT c.CategoryName,
  (select sum(val)
   from (SELECT TOP 5 od2.UnitPrice*od2.Quantity as val
         FROM [Order Details] od2, Products p2
         WHERE od2.ProductID = p2.ProductID
         AND c.CategoryID = p2.CategoryID
         ORDER BY 1 DESC
        ) t
  )
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, c.CategoryId