2013-12-10 148 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