查找多次出现
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 BY
和 LIMIT
到 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
如果他们有相同的计数(这是最大值)。
这里是 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 BY
和 LIMIT
到 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
如果他们有相同的计数(这是最大值)。