SQL实现不同邮箱域名的邮箱地址数量统计
统计不同邮箱域名对应的邮箱地址数量
嘿,这需求很常见,咱们直接来搞定它!核心思路就是从邮箱地址里提取出域名部分,再按域名分组计数。下面我给你分不同数据库类型给出具体的SQL实现,你可以根据自己用的数据库来选:
MySQL/MariaDB 实现
SELECT SUBSTRING_INDEX(email, '@', -1) AS domain, COUNT(*) AS count FROM your_table_name GROUP BY domain ORDER BY count DESC;
解释一下:SUBSTRING_INDEX(email, '@', -1) 这个函数会把邮箱地址按@分割,取最后一段,也就是咱们要的域名。然后按域名分组,用COUNT(*)统计每个域名下的邮箱数量,最后按数量降序排列(可选,方便看排行)。
PostgreSQL 实现
SELECT SPLIT_PART(email, '@', 2) AS domain, COUNT(*) AS count FROM your_table_name GROUP BY domain ORDER BY count DESC;
这里用SPLIT_PART(email, '@', 2),意思是按@分割邮箱地址,取第2部分,也就是域名。逻辑和上面完全一致。
SQL Server 实现
SELECT RIGHT(email, LEN(email) - CHARINDEX('@', email)) AS domain, COUNT(*) AS count FROM your_table_name GROUP BY RIGHT(email, LEN(email) - CHARINDEX('@', email)) ORDER BY count DESC;
SQL Server里没有直接的分割函数,所以用CHARINDEX找到@的位置,再用RIGHT截取从@后面到结尾的部分,从而得到域名。
用你给出的测试数据运行上面任意一段SQL,都会得到你期望的结果:
domain | count
--------------+-----------------
email.com | 2
something.com | 1
记得把your_table_name替换成你实际的表名哦!
内容的提问来源于stack exchange,提问作者user6236754
相关产品推荐
相关产品推荐

