【问题标题】:Count number of unique values计算唯一值的数量
【发布时间】:2013-05-22 16:38:59
【问题描述】:

如果我有三列:

orderNumber, name, email

我想计算表中有多少独特的电子邮件,我该怎么做?

这样的语句:

SELECT count(email) FROM orders

给我总数。

我试过SELECT DISTINCT count(email) FROM orders

但这似乎并没有给我我期望的数字。

【问题讨论】:

标签: mysql


【解决方案1】:

使用

SELECT count( DISTINCT(email) ) FROM orders

不同地提供唯一的电子邮件 ID,然后简单地计算它们。

【讨论】:

  • 尽管我很感谢您的回答,但您能解释一下为什么这与我为自己的启迪所做的不同吗?
  • 这样您计算的是不同的电子邮件,而不是不同的电子邮件计数
  • @thatidiotguy,通过执行“SELECT DISTINCT count(email) FROM orders”,您首先计算所有电子邮件(包括重复邮件),然后使用 distinct 进行过滤。因此您将收到电子邮件总数而不是不同电子邮件的总数。
  • @Bartdude 谢谢你的澄清。这是有道理的。
  • @AlpeshGediya : me netiher,实际上我认为我在英语方面很有创意:-)
【解决方案2】:
SELECT  count(DISTINCT(email)) FROM orders

它与您的帖子不同,因为它会在计算之前过滤掉重复项

【讨论】:

    【解决方案3】:

    接受的灵魂对我不起作用 - 它为表中每个唯一的电子邮件地址返回一个“1”。

    这是我必须做的才能获得所需的信息:

    select email, count(email) AS total from sysAccessLog group by email order by total desc
    

    返回电子邮件地址列表和出现次数。

    【讨论】:

      【解决方案4】:

      为了获得最佳性能,您应该使用:

      SELECT 
      sub.email, 
      count(1) as 'count_unique' 
      FROM 
      (SELECT email FROM orders GROUP by email) sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多