首页 > 解决方案 > 错误查询SQL“组函数使用无效”

问题描述

我正在尝试运行此查询,但出现此错误“组函数的使用无效”。也尝试过group by Año, Mes, Turno;,结果相同。

另外我想将 THEN 乘以 100,以便结果是一个百分比,我必须在 THEN 的同一行上或在 AS 之前的末尾做它?

select year(c.start) as Año, month(c.start) as Mes, s.name as Turno,
SUM(
    CASE
        WHEN u.name ='Jorge Robles Ruiz'
        THEN SUM(TIMESTAMPDIFF(SECOND,c.start,c.end)/3600) /
            SUM(TIMESTAMPDIFF(SECOND,s.startTime,s.endTime)/3600)
        ELSE 0
    END
) AS 'Jorge Robles Ruiz',
SUM(
    CASE
        WHEN u.name ='Ricardo Jarquín'
        THEN SUM(TIMESTAMPDIFF(SECOND,c.start,c.end)/3600) /
        SUM(TIMESTAMPDIFF(SECOND,s.startTime,s.endTime)/3600)
        ELSE 0
    END
) AS 'Ricardo Jarquín' 
from `cicles` as `c` 
inner join `users` as `u` on `u`.`id` = `c`.`opId` and `u`.`companies_id` = `c`.`companies_id` 
inner join `shifts` as `s` on `s`.`id` = `c`.`shiftId` and `s`.`companies_id` = `c`.`companies_id` 
where `c`.`start` 
    between 2018-12-01 and 2019-01-11 
    and `c`.`opId` in (1, 2) 
    and `s`.`visible` = 1 
    and `c`.`companies_id` = 1 
    and `c`.`status` = 1 
group by year(c.start), month(c.start), s.name;

感谢你们!

PD。对不起,我的英语不好。

标签: mysqlsql

解决方案


你不能有SUM()inside SUM(),我认为你在这里不需要它们。我认为你应该写:

SUM(IF(u.name = 'Jorge Robles Ruiz', TIMESTAMPDIFF(SECOND,c.start,c.end), 0))
    / SUM(IF(u.name = 'Jorge Robles Ruiz', TIMESTAMPDIFF(SECOND,s.startTime,s.endTime), 0))
    / 3600 AS 'Jorge Robles Ruiz',

100要使其成为百分比,请在末尾乘以,或者只需更改/ 3600/ 36.


推荐阅读