[英]Calculating Average of Datediff
我的模式中有 2 個表: employee和dept_emp 。
員工表包含所有員工的數據: emp_no、first_name、last_name、hire_date (員工何時開始為公司工作)。 員工表看起來像這樣
emp_no | 名 | 姓 | 聘用日期 |
---|---|---|---|
10001 | 利亞姆 | 尼爾森 | 1997-01-02 |
10002 | 房地美 | 汞 | 1998-01-02 |
10003 | 菲爾 | 福登 | 1999-01-02 |
另一方面, dept_emp表顯示每個員工在哪個部門工作。一個員工可以在不同的時間段內工作 > 1 個部門。 例如,Emp 1 可以從 1990 年 1 月 1 日到 1991 年 12 月 31 日在 2 部門工作,然后從 1992 年 1 月 1 日開始在 2 部門工作。 該表由emp_no、dept_no、from_date (該員工開始為該部門工作的時間)、 to_date (該員工開始為該部門工作的時間)組成。 dept_emp表看起來像這樣:
emp_no | 部門號 | 從日期 | 迄今為止 |
---|---|---|---|
10001 | 0001 | 1997-01-02 | 9999-01-02 |
10002 | 0002 | 1998-01-02 | 1999-03-15 |
10002 | 0004 | 1999-03-16 | 2001-01-02 |
10003 | 0003 | 1999-01-02 | 2001-04-08 |
根據該表,對於目前仍在公司工作的所有員工, dept_emp表中的to_date字段填充為“9999-01-01”(以顯示還沒有辭職日期),而對於有resigned to_date字段填寫了他們的辭職日期。
現在對於上一個案例,我計算了每個員工在公司工作了多少天,但只計算了那些已經辭職的員工。 我發現要獲得結果,我必須使用以下查詢從 max( to_date ) 字段中減去 min( from_date ) 字段的辭職日期:
SELECT
e.emp_no,
e.first_name,
e.last_name,
e.hire_date,
MAX(d.to_date) AS leave_date,
DATEDIFF (MAX(d.to_date),MIN(d.from_date)) AS days_employed
FROM
employees e
JOIN
dept_emp d ON e.emp_no = d.emp_no
GROUP BY e.emp_no
HAVING MAX(d.to_date) < SYSDATE()
ORDER BY DATEDIFF (MAX(d.to_date),MIN(d.from_date)) DESC;
我現在已經達到了所有離職員工的工作天數。 但現在我發現我想知道所有辭職員工平均為我公司工作的時間。 我已經使用datediff function 的平均值嘗試了以下代碼,但是 MySQL 工作台說我的語法有問題,我覺得我在這里遺漏了一些東西:
SELECT
AVG(DATEDIFF (days, MAX(to_date), MIN(from_date))) AS avg_days_employed
FROM
dept_emp
HAVING MAX(to_date) < SYSDATE();
我覺得我在這里錯過了一些東西
AVG(MAX())
) - 這是不允許的。to_date < SYSDATE()
那么 output 將為空。為了解決您在子查詢中需要:
SELECT AVG(days_employed) average_days_employed
FROM ( SELECT DATEDIFF (MAX(to_date), MIN(from_date)) AS days_employed
FROM dept_emp
GROUP BY emp_no
HAVING MAX(to_date) < SYSDATE()
) subquery;
PS。 你(我也是)沒有考慮到同一名員工被解雇然后重新雇用的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.