簡體   English   中英

計算 Datediff 的平均值

[英]Calculating Average of Datediff

我的模式中有 2 個表: employeedept_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();

我覺得我在這里錯過了一些東西

  1. 您嘗試使用嵌套聚合 function ( AVG(MAX()) ) - 這是不允許的。
  2. 所有行都被視為一組 - 所以如果至少有一行匹配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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM