混合组列与无组列
Posted
技术标签:
【中文标题】混合组列与无组列【英文标题】:Mixing of Group Columns with No Group Columns 【发布时间】:2009-11-11 01:22:29 【问题描述】:我收到此错误,但不知道如何处理它。简单的解释将不胜感激。错误:
1140: 如果没有 GROUP BY 子句,混合 GROUP 列 (MIN(),MAX(),COUNT(),...) 与没有 GROUP 列是非法的 - SELECT
records_found
FROM (emails
) WHERE
【问题讨论】:
【参考方案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 = '电子邮件地址'
【讨论】:
以上是关于混合组列与无组列的主要内容,如果未能解决你的问题,请参考以下文章