我有兩個表是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
uj5u.com熱心網友回復:
對結果進行排序并只取第一行?
SELECT TOP (1) WITH TIES
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
ORDER BY SUM(CO.OrderTotalPrice) DESC
編輯 1:更改為 SQL Server 語法,根據問題進行編輯
編輯 2:添加WITH TIES以便在多個客戶被系結到最高支出時回傳多行
uj5u.com熱心網友回復:
應該幾乎產生與 MatBailie 相同的結果,包括關系,但如果絕對必要,請避免使用 TOP
SELECT
Results.CusID, Results.Name, Results.OrderTotalPrice
FROM (
SELECT
CustomerOrder.CusID, Customers.CusName as Name
, SUM(CustomerOrder.OrderTotalPrice) as OrderTotalPrice
, RANK() OVER (ORDER BY SUM(CustomerOrder.OrderTotalPrice) DESC) as SalesRank
FROM CustomerOrder
JOIN Customers ON Customers.CusID = CustomerOrder.CusID
GROUP BY CustomerOrder.CusID, CusName
) Results
WHERE Results.SalesRank = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/356347.html
上一篇:MySQL8:授予列級權限?
