我有以下查詢:
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 不喜歡它。
uj5u.com熱心網友回復:
使用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
uj5u.com熱心網友回復:
您可以在查詢中使用MAX()和FIRST_VALUE()視窗函式:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/357313.html
