[英]Using COUNT with MAX in SQL
我試圖找出哪個客戶交易最多。 事務表具有一個外鍵,用於標識與客戶的每個事務。 我目前的代碼如下:
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)代碼的后半部分不接受'Total#of Transactions'。 如果我要將它重命名為單個單詞,我可以將其視為變量。 2)我的最后一個SELECT語句給出了客戶及其所有交易的結果,但沒有給我COUNT這些交易。 我不確定如何將COUNT與MAX結合使用。
首先選擇客戶和交易計數。
然后選擇最大的一個。
他們將您的選擇限制為該項目。
從內到外工作。
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
這應該可以為您提供所需的一切。 要獲得最高客戶,只需在選擇中添加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
您的內部表只返回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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.