用于显示电子邮件列中域名总数的 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的主要内容,如果未能解决你的问题,请参考以下文章

SQL:按电子邮件域名排序

oracle sql cursor 使用邮件域名更新邮件域名

用于检查特定电子邮件域名的 Oracle 函数

有没有最简单的方法从 oracle 的电子邮件地址中只选择域名?

如何将列中的超链接插入Outlook电子邮件正文

如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?