【发布时间】:2021-12-24 01:40:34
【问题描述】:
我有两张桌子,CustomerOrder 和 Customers
CustomerOrder
CusOrderID CusID OrderTotalPrice
S01 C01 180
S02 C04 50
S03 C05 70
S04 C07 46
S05 C09 78
S05 C09 164
Customers
CusID CusName
C01 James
C02 Jabrial
C03 Maxi
C04 Lim
C05 Tan
C06 Rem
C07 Subaru
C08 Jay
C09 Felix
我需要一个输出,即花费最多的客户购买显示如下所示的书籍
CusID Name OrderTotalPrice
C09 Felix 242
我需要使用 max 和 sum 函数并将这两个表连接在一起,只显示一个花费最多的客户。我该如何编写查询? 下面是我的示例查询,它并没有真正起作用 也不鼓励使用 Microsoft SQL 和 TOP 函数。
SELECT MAX(s.Sum_OrdTotalPrice) AS max
From (SELECT CO.CusID,C.CusName,SUM(CO.OrderTotalPrice) AS Sum_OrdTotalPrice
FROM CustomerOrder CO
INNER JOIN Customers C On CO.CusID = C.CusID
Group by CO.CusID,C.CusName
)s
【问题讨论】:
-
MySQL 5.x 还是 MySQL 8? (如果你只想要一行,为什么不使用
ORDER BY Sum_OrdTotalPrice DESC LIMIT 1?) -
你的编辑说
it's SQL,但是MySQL是SQL,你的意思是Microsoft SQL Server吗?在这种情况下,您需要SELECT TOP (1) ...它很重要您正在使用的数据库产品。 -
是的,它是 Microsoft SQL 服务器,我们也不鼓励使用前 1,因为前 1 仅显示第一行,如果有重复的最大值,则仅显示其中一行
-
然后在您的问题中包含该要求。
-
因为“仅仅因为”而避免
TOP (1) WITH TIES从根本上说是自我挫败。