【问题标题】:#1111 - Invalid use of group function in mysql#1111 - 在 mysql 中无效使用组函数
【发布时间】:2014-04-03 05:26:36
【问题描述】:

我有一个包含字段的表 M_DAILY

PS_DATE date,
tp int,
ep int,
mp int,

并且有一个用户定义的工作版本function nvl(x,y),如果不为空则返回 x,如果 x 为空则返回 y

我的 MySQL 查询是-

select sum(avg(case date_format(PS_DATE,'%Y') when '2005' then nvl(tp,0) else 0 end))tp, sum(avg(case date_format(PS_DATE,'%Y') when '2005' then nvl(ep,0) else 0 end)) ep, sum(avg(case date_format(PS_DATE,'%Y') when '2005' then nvl(mp,0) else 0 end)) mp
from M_DAILY
where PS_DATE >= date ('2005-01-01') and PS_DATE <= date ('2005-12-31')
group by PS_DATE;

我收到以下错误

#1111 - Invalid use of group function in mysql

请帮忙。

【问题讨论】:

  • PS_DATE BETWEEN '2005-01-01' AND '2005-12-31'
  • 无效,同样的错误
  • 用您的新信息更新您的问题 - 如果您在某些方面仍需要帮助

标签: mysql mariadb mysql-error-1111


【解决方案1】:

SUM()、COUNT()、AVG()、MIN()、MAX() 等是聚合函数 要求您指定一个 GROUP BY,除非您在每个 SELECT 列表中的列。

删除分组依据子句

试试这个

SELECT SUM(tp),SUM(ep),SUM(mp) FROM
(
    SELECT Avg(case date_format(PS_DATE,'%Y') when '2005' then nvl(tp,0) else 0 end) tp,   
           Avg(case date_format(PS_DATE,'%Y') when '2005' then nvl(ep,0) else 0 end) ep, 
           Avg(case date_format(PS_DATE,'%Y') when '2005' then nvl(mp,0) else 0 end) mp   
    FROM M_DAILY 
    WHERE PS_DATE >= date ('2005-01-01') and PS_DATE <= date ('2005-12-31');
) As T

【讨论】:

  • 我尝试了你建议的两个选项,但没有效果,它仍然产生同样的错误
  • @tanzeem 试试Group By tp,ep,mp
  • 又没有效果了。和have子句有关系吗
  • 我检查并发现 sum(avg(...)) 不能一起使用。当我使用 avg(..) 时,我得到了值。看来我必须单独使用总和
  • 哦,然后试试我的新解决方案..@tanzeem
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2015-07-20
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多