2013-12-10 143 views
2

在這裏和其他論壇上搜索了很多其他主題後,我似乎無法找到解決我的問題。MAX()和SUM()聚合SQL查詢

我想要實現的是選擇每個商店花費最高的帳戶。

這裏是我到目前爲止有:

SELECT MAX(s.Amount) MaxOfAmount 
     , s.shopID 
    FROM 
     (SELECT SUM(OrderTotal) Amount 
      , shopID 
      , accountID 
      FROM Transactions 
     GROUP 
      BY shopID 
      , accountID 
    ) s 
    GROUP 
    BY s.shopID 

這讓我每shopID帳戶花了正確的最多的錢,但我不能看到與它相關聯的帳戶ID。我嘗試添加selection.accountID到第一個選擇。但是,我必須將selection.accountID添加到「GROUP BY」子句中,這與「FROM」查詢會產生相同的記錄集。

我完全不知所措,所以任何幫助表示讚賞。

回答

2

請試試這個這應該工作。

SELECT selection1.shopID,accountID,Amount 
    FROM (SELECT SUM(OrderTotal) as Amount, shopID, accountID FROM Transactions GROUP BY  shopID, accountID) AS selection1 
    INNER JOIN 
(
    SELECT Max(selection2.Amount) AS MaxOfAmount, selection2.shopID 
    FROM (SELECT SUM(OrderTotal) as Amount, shopID, accountID FROM Transactions GROUP BY shopID, accountID) AS selection2 
    GROUP BY selection2.shopID 
) 
MAX_AMOUNT ON 
    MAX_AMOUNT.MaxOfAmount=selection1.Amount AND 
    MAX_AMOUNT.shopID=selection1.shopID 
+0

工作,謝謝堆! 我完全忘了我不得不INNER加入兩個SELECTS來得到我想要的結果,但現在有道理! – Jenszor

+0

歡迎朋友:) –

0

我不確定,你可以在一個查詢中做到這一點。或者這個查詢會有些緩慢而且不美觀。

我通過創建「視圖」或「#tmp_table」與您的子查詢解決同樣的問題:

SELECT SUM(OrderTotal) as Amount, shopID, accountID INTO #shop_acc_amount FROM Transactions GROUP BY shopID, accountID 

SELECT Max(selection.Amount) AS MaxOfAmount, selection.shopID,selection2.accountID 
FROM #shop_acc_amount AS selection 
JOIN #shop_acc_amount AS selection2 on selection2.shopID = selection.shopID AND selection2.Amount = Max(selection.Amount) 
GROUP BY selection.shopID,selection2.accountID