【问题标题】:Getting the "[Err] 1111 - Invalid use of group function" error获取“[Err] 1111 - 组函数的无效使用”错误
【发布时间】:2012-12-16 22:57:49
【问题描述】:

我目前正在做这个查询:

SELECT Date_Format(M.Signupdate,"%Y-%m") as YearMonth,
SUM(IF(Count(H.Nr) >= 0,1,0)) ,
SUM(IF(Count(H.Nr) >= 1,1,0)) ,
SUM(IF(Count(H.Nr) >= 2,1,0)) ,
SUM(IF(Count(H.Nr) >= 3,1,0)) 
FROM people M 
INNER JOIN History H ON H.login = M.Login 
WHERE
M.Masteraccount = "" AND
M.logincount > 5 AND
DATEDIFF(M.lastlogin,M.Signupdate) >= 3 AND
DATEDIFF(H.EntryDate,M.Signupdate) <= 151
GROUP BY YearMonth ORDER BY YearMonth ;

但是,我不断收到“[Err] 1111 - 组函数的无效使用”错误。如果我删除 SUM,它工作得很好。请问有谁给我答案吗?

【问题讨论】:

    标签: mysql group-by mysql-error-1111


    【解决方案1】:

    您不能在GROUP BY 中使用别名。您需要将Date_Format(M.Signupdate,"%Y-%m") 放在GROUP BY 中才能使其正常工作。此外,您不能嵌套聚合函数,因此您需要使用子查询来获取 count,然后使用 sum

    select YearMonth,
        SUM(IF(CountNR >= 0,1,0)) ,
        SUM(IF(CountNR >= 1,1,0)) ,
        SUM(IF(CountNR >= 2,1,0)) ,
        SUM(IF(CountNR >= 3,1,0)) 
    from
    (
        SELECT Date_Format(M.Signupdate,"%Y-%m") as YearMonth,
            Count(H.Nr) CountNR 
        FROM people M 
        INNER JOIN History H 
          ON H.login = M.Login 
        WHERE M.Masteraccount = "" AND
          M.logincount > 5 AND
          DATEDIFF(M.lastlogin,M.Signupdate) >= 3 AND
          DATEDIFF(H.EntryDate,M.Signupdate) <= 151
        GROUP BY Date_Format(M.Signupdate,"%Y-%m") 
    ) src
    GROUP BY YearMonth
    ORDER BY YearMonth;
    

    【讨论】:

    • 感谢您的快速回复!但是,这个查询仍然给我同样的错误:(
    • @VincentJames 看到我的编辑,我错过了嵌套聚合函数。
    • 再次感谢。但是,“DATEDIFF(H.EntryDate,M.Signupdate)
    • @VincentJames 子查询使用WHERE 子句获取数据的count,然后应用sum。它不需要在HAVING 中,过滤器仍在内部查询中应用。您不能嵌套聚合函数,因此您必须使用子查询
    • 不,这个查询运行起来就像一个魅力。
    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2017-12-27
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多