【发布时间】:2011-01-27 06:43:16
【问题描述】:
我想更好地了解我的客户正在使用哪些域。我可以通过explodeing 每个地址并以这种方式计算域来轻松地在 PHP 中做到这一点。但我想知道是否有一种方法可以通过简单的 MySQL 查询来获取这些信息?
这是示例输出的样子:
gmail.com | 3942
yahoo.com | 3852
hotmail.com | 209
...以此类推,其中第一列是电子邮件地址域,第二列是该域的地址数。
【问题讨论】:
我想更好地了解我的客户正在使用哪些域。我可以通过explodeing 每个地址并以这种方式计算域来轻松地在 PHP 中做到这一点。但我想知道是否有一种方法可以通过简单的 MySQL 查询来获取这些信息?
这是示例输出的样子:
gmail.com | 3942
yahoo.com | 3852
hotmail.com | 209
...以此类推,其中第一列是电子邮件地址域,第二列是该域的地址数。
【问题讨论】:
你必须这样做:
SELECT substring_index(email, '@', -1) domain, COUNT(*) email_count
FROM table
GROUP BY substring_index(email, '@', -1)
-- If you want to sort as well:
ORDER BY email_count DESC, domain;
【讨论】:
在 WoLpH 的答案中添加 ORDER BY 会使输出更加清晰:
SELECT substring_index(email, '@', -1), COUNT(*) AS MyCount
FROM `database`.`table`
GROUP BY substring_index(email, '@', -1)
ORDER BY MyCount DESC;
【讨论】:
对上面 Wolph 的原作进行小幅调整以缩短一点,并添加漂亮的列名并限制结果,以防列表很长。根据自己的喜好调整限制
select substring_index(email, '@', -1) AS domain, count(*) from TABLE group by domain order by count(*) DESC limit 40;
【讨论】:
select distinct SUBSTRING(Email, CHARINDEX('@', Email) + 1,LEN(Email) - CHARINDEX ('@', Email)), Count(*) from Tbl_name
Group by SUBSTRING(Email, CHARINDEX('@', Email) + 1,LEN(Email) - CHARINDEX ('@', Email))
order by Count(*) desc
【讨论】:
您可以使用此查询从表中获取域的唯一计数。
SELECT substr(email,INSTR(email,"@")+1),count(substr(email,INSTR(email,"@"))) from YOUR_TABLE group by substr(email,INSTR(email,"@"));
【讨论】:
SELECT
substring_index(email_address, '@', -1) AS Domain
,COUNT(*) AS MyCount
FROM
database_name.table_name
GROUP BY
substring_index(email_address, '@', -1)
ORDER BY
MyCount DESC
【讨论】:
【讨论】: