我正在創建一個時鐘系統和管理網站。我正在試圖通過MySQL查詢爲特定部門提取加班的數量。計算總加班MySQL
的timeclocks更新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
個表和他們工作的加班量。
當我想要找到一份爲所有員工工作的加班時間時,我遇到了麻煩。我認爲我將能夠只是把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小時,但平均說沒有。
非常感謝你,我需要爲內部表添加一個別名,以避免ERROR 1248,但是這樣做後它的效果很好 – 2011-12-21 20:10:55
doh!甲骨文腦損傷。遺憾的是失蹤的別名。 – 2011-12-21 22:43:45