【问题标题】:#1111 - Invalid use of group function - MYSQL#1111 - 组函数的无效使用 - MYSQL
【发布时间】:2017-01-19 02:20:41
【问题描述】:

好吧,我正在使用以下查询,但是我收到以下错误(#1111 - 组函数的使用无效)。这是查询:

SELECT 
    a.`wo_number`,
    a.`crew_est`,
    a.`manhour_est`,
    b.`act_hours`,
    a.`status`,
    SUM(CASE
        WHEN a.`status` = 'FINISH' THEN SUM(a.`status`)
        ELSE 0
    END) / SUM(a.`crew_est` * a.`manhour_est`) AS `total_percentage`
FROM
    `table_a` AS a
        LEFT JOIN
    `table_b` AS b ON a.`wo_number` = b.`wo_number`
WHERE
    a.`wo_number` = 'some_number'
GROUP BY a.`wo_number` , a.`sheet` , a.`serial`

如果我删除 CASE WHEN THEN 中的 SUM(),则查询有效。但是,我没有得到满足我需要的准确结果。

任何帮助将不胜感激。 谢谢。

【问题讨论】:

  • 为什么需要status 字段的嵌套总和?另外,为什么要对那个文本字段 status 求和?

标签: mysql


【解决方案1】:

您正在嵌套 SUM 函数,这是不允许的。

你可能想要这个:

SELECT 
    a.`wo_number`,
    a.`crew_est`,
    a.`manhour_est`,
    b.`act_hours`,
    a.`status`,
    SUM(CASE
        WHEN a.`status` = 'FINISH' THEN 1 -- or the column you want to aggregate
    END) / SUM(a.`crew_est` * a.`manhour_est`) AS `total_percentage`
FROM
    `table_a` AS a
        LEFT JOIN
    `table_b` AS b ON a.`wo_number` = b.`wo_number`
WHERE
    a.`wo_number` = 'some_number'
GROUP BY a.`wo_number` , a.`sheet` , a.`serial`

也是

的简写
SUM(CASE
        WHEN a.`status` = 'FINISH' THEN 1
    END)

SUM(a.`status` = 'FINISH')

【讨论】:

  • 我尝试了查询,它正在工作,但结果不符合我的需要。我尝试将 excel 公式转换为 mysql 查询。这是 Excel 公式: =SUMIF(E$3:E$19,"FINISH",D$3:D$19) / SUM(D$3:D$19) 其中 E$3:E$19 = 状态,FINISH 是条件,D$3 :D$19 是 (a.crew_est * a.manhour_est)
  • 那会是什么?为什么要对文本列“状态”求和?
猜你喜欢
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2021-11-21
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多