混合组列与无组列

时间:2009-11-11 01:22:30

标签: mysql sql mysql-error-1140

我收到了这个错误,我不确定如何使用它。很简单的解释将非常感激。错误:

  

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果要使用聚合函数(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'

答案 2 :(得分:0)

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

SELECT COUNT(*)AS records_found FROM(电子邮件) 电子邮件='电子邮件地址'