mysql - 错误查询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。对不起,我的英语不好。
解决方案
你不能有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
.
推荐阅读
- python - Python 数据框 - .astype(str).astype(int) 给出错误 ValueError: invalid literal for int() with base 10: ''
- javascript - 画布已被带有 computedStyleMap().get("background-image") 的跨域数据污染
- azure-logic-apps - 带有逻辑应用的 Azure APIM:定义被忽略?
- reactjs - How to add event listener to the div element accessed with ref using react and typescript?
- json - 统一反序列化 json 不会返回任何内容
- android - 无法使用 Delphi 10.4 在 Android 中加载 sqlite 库
- node.js - NodeJS Express Mongoose 如何使用参数进行获取查询
- c# - 无法在本地屏幕上查看 Web 应用程序的远程源
- python-3.x - 上下文管理器中出现异常时是否调用 __exit__ 方法?
- firebase - 世博会推送通知在本机反应中使用firebase云功能