首页 > 解决方案 > 我如何计算正在使用的相同电子邮件,但此 MySQL 数据库中的域不同?

问题描述

小数据分析师在这里。我有三个字段:clean_email、email 和 email_domain

干净的电子邮件:是域之前的信息。因此,如果电子邮件是 dataguy@yahoo.com,则该字段只会显示 dataguy

电子邮件是整个电子邮件:dataguy@yahoo.com

email_domain只是域:yahoo.com

我需要计算具有不同域的干净电子邮件的数量。我们注意到有些电子邮件可能是 dataguy@yahoo.com、dataguy@hotmail.com 或 dataguy@outlook.com。您注意到电子邮件相同,但域不同,因此我们正在尝试识别何时发生这种情况。此人的域总数为 3,我需要列出这些特定域。

我目前的查询是:

   SELECT clean_email, email, COUNT(DISTINCT email_domain)
    FROM email
GROUP BY clean_email, email

我尝试过以多种方式使用 COUNT,但它没有返回我需要的东西。它通常返回 1 行。

标签: mysqlsqlcountdistinctvariations

解决方案


您可以使用substring_index()

SELECT substring_index(email, '@', 1) as clean_email,
       COUNT(DISTINCT substring_index(email, '@', -1))
FROM email
GROUP BY clean_email;

编辑:

如果您想要域,请使用GROUP_CONCAT()

SELECT substring_index(email, '@', 1) as clean_email,
       COUNT(DISTINCT substring_index(email, '@', -1)),
       GROUP_CONCAT(DISTINCT substring_index(email, '@', -1))
FROM email
GROUP BY clean_email
HAVING COUNT(DISTINCT substring_index(email, '@', -1)) > 1;

推荐阅读