【发布时间】:2013-04-25 10:20:59
【问题描述】:
我正在使用 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
嗯...事实证明,聚合函数中不允许子查询。我已阅读有关此问题的其他帖子,但找不到适合我的特定用例的解决方案。希望你能帮帮我...
【问题讨论】:
-
您使用的是哪个版本的 RDBMS?此外,您的问题也不正确,因为订单可以属于多个类别。
-
我使用的是 MSSQL 2012。如果您引用子查询,则有一个 WHERE 子句 -
WHERE c.categoryID = p2.CategoryID- 应该只过滤一个类别。
标签: sql subquery sql-server-2012 aggregate-functions northwind