2017-10-11 75 views
0

我試圖顯示3個時期的平均休假日和病假。使用SQL顯示特定時段的平均時間

到目前爲止,我有這樣的SQL查詢:

SELECT AVG(VACATIONHOURS) AS 'Vacation hours', AVG(SICKLEAVEHOURS) AS 'SICK DAYS' 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1960' AND '12-31-1969' 
UNION ALL 
SELECT AVG(VACATIONHOURS) AS 'VACATION', AVG(SICKLEAVEHOURS) AS 'SICK DAYS' 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1970' AND '12-31-1979' 
UNION ALL 
SELECT AVG(VACATIONHOURS) AS 'VACATION', AVG(SICKLEAVEHOURS) AS 'SICK DAYS' 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1980' AND '12-31-1989' 
; 

我的輸出只有2列生病,休假一天,在與數字3行。

Output picture

我的問題是如何增加一個第三列,將顯示年?

我需要的報表生成器,所以我可以代表信息正確

+1

你是什麼意思年?你想在第一排寫1960年到1969年嗎? – Valli

+0

我需要添加第三列,表明從1960年到1969年選擇45和42號碼 – ANNA

回答

0

我希望你希望增加今年在where子句中,然後只需添加最大(年)

SELECT AVG(VACATIONHOURS) AS 'Vacation hours', 
     AVG(SICKLEAVEHOURS) AS 'SICK DAYS', 
     max('1960 to 1969') 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1960' AND '12-31-1969' 
+0

這正是我正在尋找的。我只是不明白'max'方法是如何工作的? – ANNA

+0

如果您只使用'1960至1969',您將收到錯誤消息,指出不是按功能分組。所以如果你使用像max或min這樣的聚合函數,你不需要添加一個group。在這種情況下,Max(一些字符串)和一些字符串是相同的 – Valli

+0

我明白了,有道理。謝謝 – ANNA

0

我會建議你把這些分組。我只是這樣做:

SELECT CONCAT(YEAR(BIRTHDATE), 's') as decade, 
     AVG(VACATIONHOURS) AS `Vacation hours`, 
     AVG(SICKLEAVEHOURS) AS `SICK DAYS` 
FROM HUMANRESOURCES.EMPLOYEE E 
GROUP BY decade 
ORDER BY decade;