簡體   English   中英

在SQL中使用COUNT和MAX

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM