2016-09-19 229 views
0

我正在研究一個腳本,以確定我們數據庫中的哪些電子郵件提供商是最受歡迎的。 URL鏈接是表格的名稱,'contact_email'是與鏈接關聯的聯繫人電子郵件地址。MySQL Group By Count Substring

我寫了下面MySQL查詢

SELECT 
url_links.contact_email,count(url_links.contact_email) 
FROM 
url_links 
group by contact_email order by count(url_links.contact_email) DESC 

該查詢返回所有的電子郵件和誰遞交了上市的人的數量的。我想要做的就是修改MySQL腳本,以便它能夠統計整個提供者。即Gmail.com,Yahoo.com,Hotmail.com等

我可以讀取整個數組到PHP中,並在@符號上做一個'爆炸'並將它分組,這種方式,但我很好奇,如果社區知道如何修改這個腳本,以便計數不是每個電子郵件地址 - 它會給出Gmail,雅虎等組中的所有電子郵件地址數

又名'Group By Substring'其中所有項目將按'@'符號之後的所有內容進行分組。

謝謝!

回答

1

可以分組和計數方式:

right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@')) 

這樣的事情應該工作:

SELECT 
right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@')), count(right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@'))) 
FROM 
url_links 
group by right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@')) order by count(right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@'))) DESC 
+0

感謝塞薩爾。我試過你的腳本,但是它返回了和我的腳本一樣的輸出。每個電子郵件一個結果而不是每個提供者一個結果 – Viktor

+0

嗨維克多,我更新了我的答案,我正在分組(並選擇)錯誤的「url_links.contact_email」字段 – Cesar

+0

這工作!我可以問你一個獎金問題嗎?你將如何添加一個名爲「百分比」的額外MySQL字段 - 即它需要整個數據庫的完整計數,並將其表示爲給定提供者下「列表」的百分比? – Viktor