【问题标题】:MySQL Query to Count Unique Domains from Email Address fieldMySQL 查询以计算电子邮件地址字段中的唯一域
【发布时间】:2011-01-27 06:43:16
【问题描述】:

我想更好地了解我的客户正在使用哪些域。我可以通过explodeing 每个地址并以这种方式计算域来轻松地在 PHP 中做到这一点。但我想知道是否有一种方法可以通过简单的 MySQL 查询来获取这些信息?

这是示例输出的样子:

gmail.com | 3942

yahoo.com | 3852

hotmail.com | 209

...以此类推,其中第一列是电子邮件地址域,第二列是该域的地址数。

【问题讨论】:

    标签: email mysql count dns


    【解决方案1】:

    你必须这样做:

    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;
    

    【讨论】:

    • 非常好,谢谢!我在计数(*)上添加了一个排序,我得到了我需要的结果。
    • 太棒了!谢谢!
    • 谢谢!那是我正在寻找的
    【解决方案2】:

    在 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's answer吗?两年前也提出了同样的建议;-)
    • 是的。我添加了 ORDER BY MyCount DESC;我很想将它作为评论添加到他的评论中,但还没有 50 名声望......我显然可以在我的回答中更清楚地说明这一点。
    • 是的,解释可能有助于避免投票。顺便说一句,我没有拒绝您的回复,因为它是有效的。我真希望他们能放宽整个 50 分的限制……因为它经常产生与预期相反的效果。很多人做的和你做的一模一样。即发布答案,因为他们还不能发表评论。第 22 条。
    【解决方案3】:

    对上面 Wolph 的原作进行小幅调整以缩短一点,并添加漂亮的列名并限制结果,以防列表很长。根据自己的喜好调整限制

    select substring_index(email, '@', -1) AS domain, count(*) from TABLE group by domain order by count(*) DESC limit 40;
    

    【讨论】:

      【解决方案4】:
      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
      

      【讨论】:

        【解决方案5】:

        您可以使用此查询从表中获取域的唯一计数。

        SELECT substr(email,INSTR(email,"@")+1),count(substr(email,INSTR(email,"@"))) from YOUR_TABLE group by substr(email,INSTR(email,"@"));
        

        【讨论】:

          【解决方案6】:
          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
          

          【讨论】:

            【解决方案7】:

            怎么样

            SELECT COUNT(DISTINCT [what you want])
            FROM MyTable
            

            COUNT(DISTINCT expr,[expr...])

            【讨论】:

            • 我不确定将电子邮件地址的各个部分分成用户和域部分的表达方式。
            猜你喜欢
            • 1970-01-01
            • 2011-07-15
            • 2018-07-08
            • 2014-05-23
            • 2012-02-17
            • 2014-06-03
            • 1970-01-01
            • 1970-01-01
            • 2020-03-12
            相关资源
            最近更新 更多