代码之家  ›  专栏  ›  技术社区  ›  Jakub

奇怪的mysql错误1111,据说以前工作过

  •  0
  • Jakub  · 技术社区  · 15 年前

    我正在尝试对在VoIP平台上运行的PHP应用程序(与计费相关)上生成的特定“报告”进行故障排除。要求我做这件事的人说:“以前做过”;)

    引发MySQL错误: 1111: Invalid use of group function

    疯狂的是,它“以前工作过”,但在一段时间后停止了,他们不能放置发生了什么事件,可能导致了这个错误。有人认为MySQL可能升级了?我在谷歌上搜索了错误,似乎找不到明确的答案。

    乍一看,你们在SQL中看到什么错误吗?

    SELECT C.ResourceGroupID AS CustomerID, CS.CustomerName, SUM(C.IN_RndDuration/60) AS Minutes, SUM(CASE WHEN (C.OUT_Duration>0 AND C.IN_RndDuration>0) THEN 1 ELSE 0 END) AS Successfull, count(0) AS Attempts     
    FROM ws_call_current AS C 
    LEFT JOIN customer_rg AS V_RG ON 
    V_RG.RGId=C.OtherResourceGroupID AND V_RG.RateTableId IS NOT NULL AND V_RG.Direction='O'
    LEFT JOIN customer AS V ON V.CustomerId=V_RG.CustomerId 
    LEFT JOIN customer_rg AS CS_RG ON CS_RG.RGId=C.ResourceGroupID AND CS_RG.RateTableId IS NOT NULL AND CS_RG.Direction='I'     
    LEFT JOIN customer AS CS ON CS.CustomerId=CS_RG.CustomerId     
    WHERE DATE_FORMAT(DATE_ADD(C.SeizeDate, INTERVAL TIME_TO_SEC(C.SeizeTime) SECOND), '%Y-%m-%d %H:%i:00') BETWEEN '2010-10-19 00:00:00' AND '2010-10-19 23:59:59'      
    AND C.SeizeDate BETWEEN '2010-10-19' AND '2010-10-19'      
    GROUP BY CS.CustomerName     
    ORDER BY SUM(C.IN_RndDuration/60) DESC
    

    我相信这是为MySQL3/4编写的,还不确定。只是想得到一些反馈。 从Google的结果中,我发现有些人通过将查询修改为 Having 而不是 where ?

    不确定。下面有什么奇怪的吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Abe Miessler    15 年前

    尝试包括 C.ResourceGroupID 在你 group by 语句。您需要在分组依据中包含所选内容中的所有非聚合项。

    你不需要 having 在上面的代码中。

    我不知道它以前是怎么工作的…

        2
  •  0
  •   Jakub    15 年前

    此版本的“降级”是导致SQL失败的原因。我真的不知道是什么原因,除了我们安装了一个新版本的MySQL来进行测试(在一个远程设备上),它解决了这个问题(从主设备指向备份MySQL服务器)。

    此错误的解决方案: 版本兼容性