gpt4 book ai didi

SQL - 聚合函数中的子查询

转载 作者:行者123 更新时间:2023-12-04 01:24:55 26 4
gpt4 key购买 nike

我正在使用 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

嗯...原来在聚合函数中不允许子查询。我已阅读有关此问题的其他帖子,但找不到适合我的特定用例的解决方案。希望你能帮帮我...

最佳答案

聚合函数中通常不允许使用子查询。相反,在子查询内移动聚合。在这种情况下,由于 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

关于SQL - 聚合函数中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com