Я создаю веб-сайт системы управления временем.Я пытаюсь получить количество сверхурочных для конкретного отдела с запросом MySQL.
Временные часы обновляют таблицу MySQL с именем events, в которой хранятся employee_id
, job
, с которыми они работают, time_in
и time_out
.Я могу создать таблицу общего количества часов, отработанных для каждого employee_id
с:
SELECT employee_id,
SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))) AS hours
FROM events
GROUP BY employee_id;
. В результате получится таблица employee_id
с и общее количество отработанных часов.Для создания таблицы сверхурочных employee_id
s я использую:
SELECT employee_id,
IF(HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))>40,
HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))-40,
0) AS overtime
FROM events
GROUP BY employee_id;
Возвращает таблицу employee_id
s и количество отработанного сверхурочного времени.
Проблема в том, что яначало, когда я хочу найти общее количество сверхурочной работы для всех сотрудников.Я предполагал, что смогу просто поместить функцию IF
, чтобы найти сверхурочное время внутри SUM()
, однако, когда я выполню следующую инструкцию:
SELECT SUM(IF(HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))>40,
HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))-40,
0)) AS overtime
FROM events;
Я получаю эту ошибку обратно:
ERROR 1111 (HY000): Invalid use of group function
Я искал повсюду для этого, но нашел немного в отношении SUM(IF(SUM()))
функций.
Примечание: время сверхурочной работы нужно рассчитывать индивидуально, я не могу просто взять total hours worked / number of employees - 40
.Если один работник работает 30 часов в неделю, а другой - 50, сверхурочно 10 часов, но в среднем говорят, что его нет.