混合组列与无组列

Posted

技术标签:

【中文标题】混合组列与无组列【英文标题】: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 = '电子邮件地址'

【问题讨论】:

【参考方案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 = '电子邮件地址'

【讨论】:

以上是关于混合组列与无组列的主要内容,如果未能解决你的问题,请参考以下文章

匹配两个数组列 postgresql-9.4-

ag-grid 组列固定

Pandas 按名称将多组列融化成多个目标列

对多组列求和

如何按行将函数应用于 PySpark 数据帧的一组列?

spark有效地找到一组列的最频繁值