2016-09-19 194 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