代码之家  ›  专栏  ›  技术社区  ›  Stephen

这个MySQL查询总是返回预期的结果吗?

  •  1
  • Stephen  · 技术社区  · 14 年前

    我写了一个问题如下:

      SELECT COUNT(*) AS count, email
        FROM sometable
    GROUP BY email
    ORDER BY count DESC 
       LIMIT 4
    

    我有兴趣看到表中四个最重复的电子邮件条目。到目前为止,它似乎正是我想要的:

    count   email
    12      very-duplicated@email.com
    2       duped-twice@email.com
    2       also-twice@email.com
    1       single@email.com
    

    当我不使用 LIMIT ,我得到相同的结果(尽管更多的行的计数为1)。我想知道的是 限制 . 将来,当数字发生变化时,我在上面的查询是否还会返回四个最常用的电子邮件?或者查询需要扫描整个数据库以保持准确性?

    (注意:我并不是要防止重复,而是要查看最常用的电子邮件。)

    2 回复  |  直到 14 年前
        1
  •  2
  •   FrustratedWithFormsDesigner    14 年前

    我不确定。但如果您担心,可以对子查询应用限制:

    select *
    from 
    (
      SELECT COUNT(*) AS count, email
      FROM sometable
      GROUP BY email
      ORDER BY count DESC 
    )
    limit 4
    

    或者,您也可以这样做来查看所有重复的电子邮件地址(可能返回的电子邮件地址多于或少于4个):

      SELECT COUNT(*) AS count, email
        FROM sometable
    GROUP BY email
    having COUNT(email) > 1
    ORDER BY count DESC 
    
        2
  •  2
  •   Sachin Shanbhag    14 年前

    首先,查询不仅返回重复的条目。看第四行,它表示count=1,这意味着它只在表中出现一次。若要列出重复的记录,您需要将查询修改为-

    SELECT COUNT(*) AS count, email
    FROM sometable
    GROUP BY email
    HAVING COUNT(*) > 1
    ORDER BY count DESC     
    LIMIT 4
    

    然后,按照前面提到的顺序,这将始终返回表中最上面的4个重复条目。