Je crée un système de gestion du temps et un site Web de gestion. J'essaie de tirer le montant des heures supplémentaires pour un département particulier avec une requête MySQL.Calcul du temps supplémentaire total MySQL
Les minuteries sont mis à jour une table MySQL appelée événements, qui stocke les employee_id
, le job
ils travaillent, le time_in
et le time_out
. Je peux produire une table des heures travaillées de chaque employee_id
avec:
SELECT employee_id,
SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))) AS hours
FROM events
GROUP BY employee_id;
Ceci renvoie une table de employee_id
s et le total des heures ils ont travaillé. Pour créer une table des heures supplémentaires employee_id
J'utilise:
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;
Ce retourne une table de employee_id
s et le montant des heures supplémentaires travaillées.
Les problèmes que je rencontre commencent quand je veux trouver un total des heures supplémentaires effectuées pour tous les employés. Je suppose que je serais en mesure de mettre juste la fonction IF
pour trouver des heures supplémentaires à l'intérieur de SUM()
mais quand je lance la déclaration suivante:
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;
Je reçois cette erreur de retour:
ERROR 1111 (HY000): Invalid use of group function
J'ai regardé tous plus pour cela, mais ont trouvé peu de fonctions SUM(IF(SUM()))
.
Note: Les heures supplémentaires doivent être calculées individuellement, je ne peux pas prendre total hours worked/number of employees - 40
. Si un travailleur travaille 30 heures par semaine et qu'un autre travaille 50 heures, il y a 10 heures supplémentaires, mais la moyenne indique qu'il n'y en a pas.
Merci beaucoup, j'avais besoin d'ajouter un alias pour la table intérieure pour éviter ERROR 1248 mais après cela, cela a fonctionné magnifiquement –
doh! dégâts cérébraux oracle. Désolé pour l'alias manquant. –