タイムクロックシステムと管理Webサイトを作成しています。私は、MySQLのクエリを使用して、特定の部門の超過時間を引き出そうとしています。合計超過時間の計算MySQL
timeclocksはemployee_id
、彼らが作業しているjob
、time_in
とtime_out
を格納するイベントと呼ばれるMySQLのテーブルを、更新します。これは、employee_id
S、彼らが働いた総時間のテーブルを返します
SELECT employee_id,
SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))) AS hours
FROM events
GROUP BY employee_id;
:私は、各employee_id
から働いた総時間のテーブルを生成することができます。 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
秒のテーブルと、彼らが働いている時間外労働の量を返します。
私が抱えている問題は、すべての従業員が働いている残業の合計を探したいときに始まります。
ERROR 1111 (HY000): Invalid use of group function
私はすべてを見ている:私は戻って、このエラーを取得する
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;
:私は、私はちょうど私が次のステートメントを実行しますがSUM()
の内部残業を見つけるためにIF
機能を置くことができるだろうと想定しましたこれ以上はSUM(IF(SUM()))
の機能がほとんど見つかっていません。
注:超過時間は個別に計算する必要があります。私はちょうどtotal hours worked/number of employees - 40
とします。 1人の労働者が1週間に30時間働いて、別の労働者が50時間働くと、10時間の残業がありますが、平均には何もないと言われています。
ありがとう、エラー1248を避けるために内部テーブルのエイリアスを追加する必要があったが、それを行った後、それは美しく動作した –
doh!オラクルの脳の損傷。行方不明のエイリアスについては申し訳ありません。 –