用于显示电子邮件列中域名总数的 SQL
Posted
技术标签:
【中文标题】用于显示电子邮件列中域名总数的 SQL【英文标题】:SQL for showing total count of domain names from email column 【发布时间】:2013-06-15 05:49:59 【问题描述】:我在 MS Access 表中有一个电子邮件列 (duplicates-ok),我想从中显示所有域名(来自电子邮件的域部分)及其在 MS Access 中的计数。
表:
我有 SQL:
SELECT EMail.EMail, COUNT(*)
FROM EMail
GROUP BY EMail.EMail
ORDER BY COUNT(*) DESC;
但它会根据电子邮件给出结果。喜欢:
EMail Expr1001
XXX@googlemail.com 4
YYY@googlemail.com 3
AA@argpub.com 2
等等
如何显示域及其总数?喜欢:
gmail.com 10
yahoo.com 5
yahoo.co.in 3
等等
我正在使用 Access 2013。
【问题讨论】:
【参考方案1】:在 SQL 中你可以这样做:
SELECT SUBSTRING_INDEX(EMail.EMail, '@', -1) AS `Email Domain`, COUNT(*)
FROM EMail
GROUP BY SUBSTRING_INDEX(EMail.EMail, '@', -1)
ORDER BY COUNT(*) DESC;
【讨论】:
【参考方案2】:MS Access 有两个特别有用的功能。您基本上必须这样做:
提取出现在“@”字符之后的域部分。(Mid 和 InStr 函数对此有帮助。) 将此与计数一起使用。在 MS Access 中,您可以这样做:
Mid([Email],InStr([Email],"@")+1)
将为您提供域名。
如您所愿,正常计算这些使用次数。
参考:http://www.techonthenet.com/access/functions/string/mid.php
现在,如果您需要用于 MSSQL 服务器的 SQL:
select SUBSTRING(email,(CHARINDEX('@',email)+1),1), count(*) from ...(rest of your query)
【讨论】:
【参考方案3】:在一次采访中问过我这个类似的问题,我得到的解决方案是:
SELECT RIGHT(Email, LEN(Email)-CHARINDEX('@',Email)) AS Domain, COUNT(Email) AS Count
FROM tblEmails
Group By RIGHT(Email, LEN(Email)-CHARINDEX('@',Email))
ORDER BY Count ASC;
希望这会对某人有所帮助。
【讨论】:
以上是关于用于显示电子邮件列中域名总数的 SQL的主要内容,如果未能解决你的问题,请参考以下文章
oracle sql cursor 使用邮件域名更新邮件域名