使用嵌套聚合查询的SUM的最大值

时间:2018-08-20 05:40:05

标签: sql-server subquery aggregate-functions

2个月前,在我关注的DataScience MSccursur的背景下,我开始学习SQL。

使用SQL SERVER和示例数据库WideWorldImporters,我必须构建一个查询来为每个客户类别选择产生与未转换为发票的订单相关的最大损失的人。

我必须获得的结果是下表:

enter image description here

我建立了以下查询:

SELECT  CustomerCategoryName,
    MAX(SumLossesOrdersNotConverted) As MaxLoss
FROM
(   SELECT  Cat.CustomerCategoryName,
    SUM(OL.Quantity * OL.UnitPrice) as SumLossesOrdersNotConverted,
    C.CustomerName AS CustName,
    C.CustomerID AS CustID
    FROM    Sales.OrderLines AS OL 
        JOIN Sales.Orders O ON OL.OrderID = O.OrderID
        JOIN Sales.Customers AS C ON C.CustomerID = O.CustomerID
        JOIN Sales.CustomerCategories AS Cat ON Cat.CustomerCategoryID = C.CustomerCategoryID
    WHERE
        NOT EXISTS
        (
            SELECT *
            FROM Sales.Invoices as I
            WHERE O.OrderID = I.OrderID
        )
    GROUP BY C.CustomerID,C.CustomerName,Cat.CustomerCategoryName
) AS LossSummary
GROUP BY CustomerCategoryName
ORDER BY MAX(SumLossesOrdersNotConverted) DESC

并且能够获得前两列:

enter image description here

但是尽管进行了很多搜索和努力,我仍然无法添加相应的CustomerName和CustomerID列。

当然,我尝试在外部选择中添加CustName,CustId。但这并没有给我意外的结果,因为我必须在GROUP BY中添加CustName,CustId:

enter image description here

我需要一个具有每个类别的最大损失以及相应的customerid的表

任何帮助将不胜感激。 预先感谢。

1 个答案:

答案 0 :(得分:0)

这样做吗?

text()