【问题标题】:SQL MAX OF SUM AT NORTHWIND DBNORTHWIND DB 的 SQL MAX OF SUM
【发布时间】:2018-07-16 16:32:18
【问题描述】:

问:在northwind db 中,获得该员工最高认可的产品。

我的意思是我需要得到这样的结果:

Adam Iphone 131231(全代言只有adam卖的iphone)

Maria IPad 1233(仅 Maria 销售的 ipad 总代言,她作为产品的代言最高)

我可以使用下面的代码。我不能将MAXSUM 一起使用。

SELECT  E.FirstName,P.ProductName, SUM(OD.Quantity*OD.UnitPrice) AS [Toplam Satış]
FROM [Order Details] OD 
INNER JOIN Products P ON P.ProductID=OD.ProductID
INNER JOIN Orders O ON O.OrderID=OD.OrderID
INNER JOIN Employees E ON O.EmployeeID=O.EmployeeID
GROUP BY E.FirstName,P.ProductName
ORDER BY E.FirstName,P.ProductName

对于那些没有北风的人

【问题讨论】:

  • 请添加预期的输出数据和样本数据。我们大多数人可能没有 Northwind DB。
  • 你希望在 sum 之后看到最大值吗?你试过用 cte 做这个吗
  • 我不知道如何使用 cte 但我会尝试 @eray 的解决方案。

标签: sql sql-server max min


【解决方案1】:

首先SUM(OD.Quantity*OD.UnitPrice)是一个子查询,然后你可以使用子查询得到MAX

您将获得MAXSUM

SELECT x.FirstName,X.ProductName,MAX(X.Toplam Satış)
FROM
(
    SELECT  E.FirstName,P.ProductName, SUM(OD.Quantity*OD.UnitPrice) AS [Toplam Satış]
    FROM [Order Details] OD 
    INNER JOIN Products P ON P.ProductID=OD.ProductID
    INNER JOIN Orders O ON O.OrderID=OD.OrderID
    INNER JOIN Employees E ON O.EmployeeID=O.EmployeeID
    GROUP BY E.FirstName,P.ProductName
) AS X
GROUP BY X.FirstName,X.ProductName

【讨论】:

  • Ty @daniel 但它没有解决我的问题。事实上,我尝试了像你这样的解决方案。即使我尝试了您的解决方案,但结果是相同的。也许我无法表达我的问题。我需要查看所有名称一次,并且每个名称都应该有一个获得最高认可的产品。名字 产品名 MAX SM Anne Manjimup 干苹果 44742,60 Andrew Rhönbräu Klosterbier 8650,55 Michael Teatime Chocolate Biscuits 6159,50 Anne Sir Rodney's Marmalade 23635,80 ... 它就这样下去了。
【解决方案2】:

我从您的问题中了解到,如果您有如下表格:

FirstName  ProductName  TotalSale
A             Y            10
A             Z            20
B             Z            30

那么您期望看到如下输出:

FirstName  ProductName  TotalSale
A             Y            10
B             Z            30

根据情况,你能试试这样吗?我认为使用 cte 可以帮助您解决这个问题。

;with cte (FirstName,ProductName,TotalSale) as
(
   SELECT  E.FirstName,P.ProductName, SUM(OD.Quantity*OD.UnitPrice) AS [TotalSale]
   FROM [Order Details] OD 
   INNER JOIN Products P ON P.ProductID=OD.ProductID
   INNER JOIN Orders O ON O.OrderID=OD.OrderID
   INNER JOIN Employees E ON O.EmployeeID=O.EmployeeID
   GROUP BY E.FirstName,P.ProductName
   ORDER BY E.FirstName,P.ProductName
)
select cte.FirstName,cte.ProductName,MAX(cte.TotalSale)
from cte
inner join (select c.ProductName,max(c.TotalSale) as Max_sale
            from cte c
            group by c.ProductName) t on t.ProductName = cte.ProductName
                                    and t.Max_Sale = cte.TotalSale
group by cte.FirstName,cte.ProductName

【讨论】:

  • 感谢您的帮助,但结果完全错误:(结果所有名称都不同,每个产品都有相同的总背书。FirstName ProductName(无列名)Andrew Zaanse koeken 4358,60 Janet Zaanse koeken 4358,60 Margaret Zaanse koeken 4358,60 Steven Wimmers gute Semmelknödel 23009,00 Andrew Wiimmers gute Semmelknödel 23009,00 所有项目的列表都像这样下降。但是我认为接近风格是正确的。我会尝试解决这个问题。这个问题对我来说并不重要。但我只是想解决和学习。
猜你喜欢
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多