我有以下查詢:
SELECT
Id,
EmailDomain,
COUNT(Users) AS UserCount
FROM
Table_Moragn
GROUP BY
Id, EmailDomain
返回以下結果:
ID | 電子郵件域 | 用戶數 |
---|---|---|
1 | @yahoo.com | 1 |
1 | @gmail.com | 4 |
2 | @hotmail.com | 1 |
3 | @aol.com | 1 |
3 | @comcast.com | 1 |
我需要 Id 和電子郵件域以供以後查詢,但我不想要多個電子郵件域。所以我希望我的結果是這樣的:
ID | 電子郵件域 | 用戶數 |
---|---|---|
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)
但我收到一個錯誤
當子查詢沒有用EXISTS引入時,select列表中只能指定一個表達式
或者說它不能用 = 返回多個結果。
我在 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句