私はタイムレコーダーシステムと管理ウェブサイトを作成しています。MySQLクエリを使用して、特定の部門の残業の量を取得しようとしています。
タイムレコーダーは、イベントと呼ばれるMySQLテーブルを更新します。このテーブルには、、作業中の、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
これにより、 sのテーブルとそれらが働いた合計時間が返されます。employee_id
残業のテーブルを作成するには、次を使用します。
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時間の残業がありますが、平均では何もありません。