如何进行 MAX COUNT 查询 returns 1 结果 SQL

How to do MAX COUNT so Query returns 1 Result SQL

我有以下查询:

SELECT
    Id,
    EmailDomain,
    COUNT(Users) AS UserCount
FROM 
    Table_Moragn
GROUP BY 
    Id, EmailDomain

return结果如下:

Id EmailDomain UserCount
1 @yahoo.com 1
1 @gmail.com 4
2 @hotmail.com 1
3 @aol.com 1
3 @comcast.com 1

我需要 ID 和电子邮件域供以后查询,但我不想要多个电子邮件域。所以我希望我的结果看起来像这样:

Id EmailDomain UserCount
1 @gmail.com 4
2 @hotmail.com 1

原来我想通过子查询或通过

来做一个最大计数
SELECT
    Id,
    EmailDomain,
    COUNT(Users) AS UserCount
FROM 
    Table_Morgan
GROUP BY
    Id, EmailDomain
HAVING
    COUNT(Users) = (SELECT MAX(UserCount)
                    FROM (EmailDomain, COUNT(Users) as UserCount
                    FROM Table_Morgan
                    GROUP BY EmailDomain) AS T)

但是我得到一个错误

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS

或者说它不能 return 带有 =.

的多个结果

我在 ID 3 等情况下看到的一个问题,其中计数是相同的数字。

我尝试在查询末尾添加 LIMIT,但 SQL 不喜欢。

使用 Dense_Rank() 窗口函数也可以显示并列排名。

SELECT   -- main result
  *
FROM (SELECT    -- ranking here
  *,
  DENSE_RANK() OVER (PARTITION BY Id ORDER BY UserCount DESC, EmailDomain) rnk
FROM (SELECT  -- group count here
  Id,
  EmailDomain,
  COUNT(Users) AS UserCount
FROM Table_Moragn
GROUP BY Id,
         EmailDomain) x) y
WHERE y.rnk = 1

您可以在查询中使用 MAX()FIRST_VALUE() window 函数:

SELECT DISTINCT Id,
       FIRST_VALUE(EmailDomain) OVER (PARTITION BY Id ORDER BY COUNT(Users) DESC) EmailDomain,
       MAX(COUNT(Users)) OVER (PARTITION BY Id) UserCount
FROM Table_Moragn
GROUP BY Id, EmailDomain;