2013-11-26 110 views
0

我正在嘗試查找哪個客戶的交易量最大。交易表有一個外鍵,用於標識與客戶的每個交易。我目前是下面的代碼:在SQL中使用COUNT和MAX

WITH Customers as (
    SELECT 
     [CustName] as 'Customer', 
     [TRANSACTION].[CustID] as 'Total # of Transactions' 
    FROM [dbo].[CUSTOMER] 
    INNER JOIN [dbo].[TRANSACTION] 
    ON [CUSTOMER].[CustID] = [TRANSACTION].[CustID] 
) 
SELECT * 
FROM Customers 
WHERE 'Total # of Transactions' = (SELECT MAX('Total # of Transactions') FROM Customers); 

兩件事情是錯誤的: 1)代碼的後半部分不接受「交易總#」。如果我要將它重命名爲一個單詞,我可以把它看作是一個變量。 2)我的最後一條SELECT語句給了我一個客戶和他們所有交易的結果,但是沒有給我這些交易的COUNT。我不確定如何將COUNT與MAX結合使用。

+0

我要去這裏走出去的肢體..您是否在尋找客戶的計數 - 像一個整體計數?那麼,你在尋找一個獨特的計數? – Leptonator

+0

我試圖找到哪個客戶在數據庫中的交易量最大。我認爲我做得比這要複雜得多。 – cdalto

+0

你只是想要客戶ID,或者什麼?如果有多個客戶都擁有最大數量,您是否只需要一個'CustID',並且您是否希望列出所有擁有這麼多交易的客戶(即,2個客戶可能會被綁定到最多的交易) ? –

回答

0

您的內部表是否僅返回CustID作爲交易總數?您需要首先找出每位客戶的總數。同樣對於列,你可以使用[Name],當你使用撇號時它認爲你正在比較一個字符串。如果您想返回所有客戶的最高點數,則可以使用以下方法:

WITH TransactionCounts as (
    SELECT 
     CustID, 
     COUNT(*) AS TransactionCount 
    FROM [dbo].[TRANSACTION] 
    GROUP BY CustID 
) 
SELECT TOP 1 CUSTOMER.*, TransactionCount 
FROM TransactionCounts 
    INNER JOIN CUSTOMER ON CUSTOMER.CustID = TransactionCounts.CustId 
ORDER BY TransactionCount DESC 

-- alternate to select all if multiple customers are tied for highest count 
--WHERE TransactionCount = (SELECT MAX(TransactionCount) FROM TransactionCounts) 
+0

這是行不通的,你的select語句沒有'FROM',爲什麼要加入......你需要的只是count和id。 – Hogan

+0

固定。問題查詢形成的方式看起來像他希望計數與客戶輸出一起。如果你看,'客戶'是查詢表,客戶數據表是'CUSTOMER' –

+0

是的,我希望客戶的名字與交易總數一起列出。 – cdalto

1

首先選擇客戶和交易次數。

然後選擇最大的一個。

他們限制你選擇的項目。

從內到外的工作方式。

SELECT * 
FROM Customers 
WHERE CustID = 
(
    SELECT TOP 1 CustID 
    FROM (SELECT CustID, COUNT(*) AS TCOUNT 
     FROM TRANSACTIONS 
     GROUP BY CustID) T 
    ORDER BY T.TCOUNT DESC 
) TT 
1

這應該讓你得到你需要的一切。要獲得頂級客戶只需添加Top 1到選擇

WITH Customers as (
    SELECT 
     [CustName] as Name 
    FROM [dbo].[CUSTOMER] 
    INNER JOIN [dbo].[TRANSACTION] 
    ON [CUSTOMER].[CustID] = [TRANSACTION].[CustID] 
) 

-- to get count of transactions 
Select Count(*) as count, Name 
FROM Customers 
Group by Name 
Order By Count(*) desc 
+0

你確定'按數量(*)desc'的順序會起作用嗎?如果這是真的,我不會在所有SQL上運行 – Hogan

+0

,這是我從未見過的。您可能必須將其包裝在另一個查詢中,然後按命名的「count」進行排序。 – davidgarrison

+0

如果排名前1的球隊有所配合,這是否包括兩位客戶? – cdalto