【问题标题】:Mixing of Group Columns with No Group Columns混合组列与无组列
【发布时间】:2009-11-11 01:22:29
【问题描述】:

我收到此错误,但不知道如何处理它。简单的解释将不胜感激。错误:

1140: 如果没有 GROUP BY 子句,混合 GROUP 列 (MIN(),MAX(),COUNT(),...) 与没有 GROUP 列是非法的 - SELECT email, COUNT(*) AS records_found FROM (emails) WHERE email = '电子邮件地址'

【问题讨论】:

    标签: mysql sql mysql-error-1140


    【解决方案1】:

    除非包含 group by 子句,否则您不能将聚合函数(如 count(*))与非聚合列(如电子邮件)一起使用。我假设您打算尝试获取 emails 表中每个不同电子邮件的计数,这需要在您的查询中添加一个 group by 子句,如下所示:

    select email, count(*) as records_found
    from (emails) 
    where email = 'Email Address'
    group by email
    

    鉴于您使用的 where 子句将确保单独的单个电子邮件,您可能想知道为什么需要它 - 您也可以简单地在电子邮件列周围添加一个聚合函数,因为您知道它是不同的:

    select max(email), count(*) as records_found
    from (emails) 
    where email = 'Email Address'
    

    【讨论】:

      【解决方案2】:

      如果您想使用聚合函数(MIN、MAX、COUNT),您需要向 MySQL 提供有关在哪些列上执行聚合的信息。例如,在您的情况下,您应该使用

      SELECT email, COUNT(*) AS records_found FROM (emails) GROUP BY email 
      

      要获取每个电子邮件地址的行数,或者如果您只是查找具有给定地址的行数,请执行以下操作:

      SELECT COUNT(*) AS records_found FROM (emails) WHERE email = 'Email Address'
      

      【讨论】:

        【解决方案3】:

        您在输出中有电子邮件,但您没有按它分组。您很可能希望从输出中删除 email 列,因为您在 WHERE 子句中有它:

        SELECT COUNT(*) AS records_found 来自(电子邮件) WHERE email = '电子邮件地址'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-14
          • 1970-01-01
          • 2018-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多