我有一張用戶信息表,我想從中獲取列出最常見域的報告。我知道我需要使用count和group by,但我不確定如何僅通過字符串的一部分進行分組,從'@'符號。有什麼建議?MySQL根據字符串的一部分獲取數據摘要
id email name etc..
---------------------------------------------
1 [email protected] User Userson blah
我有一張用戶信息表,我想從中獲取列出最常見域的報告。我知道我需要使用count和group by,但我不確定如何僅通過字符串的一部分進行分組,從'@'符號。有什麼建議?MySQL根據字符串的一部分獲取數據摘要
id email name etc..
---------------------------------------------
1 [email protected] User Userson blah
SUBSTRING_INDEX可能會在這裏有用:
select
substring_index(email,'@',-1) as domain
,count(*) as userCount
from your_table
group by domain
order by usercount desc;
這很好,謝謝。而且只比其他選項快一點。 – Wige
嘗試此方法,使用LOCATE()
and SUBSTRING()
SELECT
SUBSTRING(email FROM LOCATE('@', email)) AS domain
COUNT(*) AS numusers
FROM tbl
GROUP BY domain
ORDER BY numusers DESC
上面將列出域作爲@example.com
。要剝去@
使用,而不是:
SUBSTRING(email FROM LOCATE('@', email)+1) AS domain
您可以在group by子句中使用別名:-) – Johan
@Johan經過測試,你是正確的:)我一直在使用SQL Server整週,在那裏是不允許的 –
下面的答案將工作,但會運行得非常緩慢。如果你想經常運行這個查詢,創建一個名爲domain的額外列,在該字段上放置一個索引,並用'UPDATE table1 SET domain = substring_index(email,'@', - 1)'填充它',那麼你可以運行這個查詢瞬間臨近。 – Johan