2011-09-27 45 views
0

我有一張用戶信息表,我想從中獲取列出最常見域的報告。我知道我需要使用count和group by,但我不確定如何僅通過字符串的一部分進行分組,從'@'符號。有什麼建議?MySQL根據字符串的一部分獲取數據摘要

id email    name   etc.. 
--------------------------------------------- 
1 [email protected] User Userson blah 
+0

下面的答案將工作,但會運行得非常緩慢。如果你想經常運行這個查詢,創建一個名爲domain的額外列,在該字段上放置一個索引,並用'UPDATE table1 SET domain = substring_index(email,'@', - 1)'填充它',那麼你可以運行這個查詢瞬間臨近。 – Johan

回答

1

SUBSTRING_INDEX可能會在這裏有用:

select 
    substring_index(email,'@',-1) as domain 
    ,count(*) as userCount 
from your_table 
group by domain 
order by usercount desc; 
+0

這很好,謝謝。而且只比其他選項快一點。 – Wige

1

嘗試此方法,使用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 
+0

您可以在group by子句中使用別名:-) – Johan

+0

@Johan經過測試,你是正確的:)我一直在使用SQL Server整週,在那裏是不允許的 –

相關問題