如何进行 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;
我有以下查询:
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;