查找多次出现

Finding multiple occurrence

这里是 table:

account no.  cust_id    Month  Installment  Status
5212340001   1002        30    15000         Closed
5212340002   1002        66    25000         Active
5212340003   1007        36    80555         Closed
5212340004   1003        60    30000         Active

我想找出拥有多个帐户的 cust_id 的最大出现次数。 这是我的代码:

SELECT CUST_ID,COUNT(CUST_ID) AS C
FROM BANK_FD_ACCOUNT
GROUP BY CUST_ID
HAVING C=MAX(C);

我遇到错误。但是预期的输出应该是这样的:

cust_id    c
1002       2

在 MySQL 中(因为问题最初被标记),您可以使用 ORDER BYLIMIT 到 return 一行:

SELECT CUST_ID, COUNT(CUST_ID) AS C
FROM BANK_FD_ACCOUNT
GROUP BY CUST_ID
ORDER BY C DESC
LIMIT 1;

如果出现重复,这将 return 任意客户。如果你想要所有这些,请使用 RANK():

SELECT c.*
FROM (SELECT CUST_ID, COUNT(*) AS C,
             RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum
      FROM BANK_FD_ACCOUNT
      GROUP BY CUST_ID
     ) c
WHERE seqnum = 1;

您可以使用 ROW_NUMBER() 到 return 一行(类似于 MySQL 示例中的 LIMIT)。

@GAURAV Sharma 您不需要使用 HAVING,只需使用 ORDER BY 语句和 LIMIT 1:

编辑注意:由于原始问题指向 MySQL 这就是此答案适用的内容。

SELECT CUST_ID,
    COUNT(CUST_ID) AS C
FROM BANK_FD_ACCOUNT
GROUP BY CUST_ID
ORDER BY c DESC 
LIMIT 1;

在 oracle 12c 及更高版本中,您可以使用 行限制子句 并按如下方式处理重复的最大值:

SELECT CUST_ID, 
       COUNT(CUST_ID) AS CNT
  FROM BANK_FD_ACCOUNT
GROUP BY CUST_ID
ORDER BY CNT DESC
FETCH FIRST RIW WITH TIES;

在这里,WITH TIES 会给你多个 cust_id 如果他们有相同的计数(这是最大值)。