2015-03-31 34 views
0

我在ETSU的數據庫基礎知識中。我們的導師來自孟加拉國,所以有時很難理解他的演講。那麼SYSDATE用法就是那些日子之一。然後在我們的實驗室有這個問題,SYSDATE在Oracle項目中查找平均工作日數量sqldeveloper

Display the average duration of work (in number of days) for employees grouped by job_id. Assume that nobody has resigned or been fired. Use Oracle date function SYSDATE.

後它仍然難倒我的教授解答谷歌的時間和堆棧溢出搜索和提問。

我試了幾次(SELECT,FROM,GROUP_BY,HAVING,& ORDER_BY),終於來到這裏尋求幫助。

這是我的腳本:

 SELECT job_id, hire_date 
    FROM hr.employees 
    GROUP BY job_id 
    HAVING AVG(SYSDATE) - hire_date; 

這是我的錯誤: 錯誤開始的行:1在命令 - SELECT JOB_ID,HIRE_DATE 從HR.EMPLOYEES GROUP BY JOB_ID HAVING AVG(SYSDATE ) - 聘用日期; 錯誤在命令行:4列:31 錯誤報告 - SQL錯誤:ORA-00920:無效的關係運算符 00920. 00000 - 「無效的關係運算符」

我到底做錯了什麼?

+0

'AVG(SYSDATE) - hire_date'不是布爾條件 - 這是錯誤消息告訴你的。 Plus:你不能計算單個日期的平均值(如果定義了這樣的操作,它只會產生sysdate) – 2015-03-31 05:56:51

+0

啊,看到這有助於我更多地瞭解SYSDATE的用途。現在,當我被問及是否有另一個實驗室的要求時,我會更好地回答問題並做好準備。我很高興我問。 – CLifford 2015-03-31 06:02:08

回答

0

Display the average duration of work (in number of days) for employees grouped by job_id. Assume that nobody has resigned or been fired. Use Oracle date function SYSDATE.

因此,假如因爲他們的HIREDATE沒有員工被解僱了,讓我們來看看下面的例子查找每個部門的僱員的工作的平均持續時間。此外,這假設一週中的所有日子(包括週末)。

SQL> SELECT deptno, 
    2 ROUND(AVG(SYSDATE - hiredate), 2) avg_duration 
    3 FROM emp 
    4 GROUP BY deptno 
    5/

    DEPTNO AVG_DURATION 
---------- ------------ 
     30  12327.79 
     20  12135.45 
     10  12218.79 

SQL> 

如果您不想包括週末,那麼您需要過濾掉週末或節假日中的那些日期。

提示,where to_char(that_date, 'Dy') not in ('Sat', 'Sun')

但是,我認爲這個問題過於簡單,並不需要進行這麼複雜。所以,上面的解決方案應該足夠了。

+0

好吧,我想我明白了。我使用了AVG,甚至使用了ROUND。它在實驗室中沒有工作。讓我試試看看會發生什麼。編輯:它的工作!謝謝sooooo了。自上午10點以來,我一直在努力。現在把它翻過來看看是否他想要的東西。 – CLifford 2015-03-31 05:51:01