0

私は ETSU でデータベースの基礎を学んでいます。講師はバングラデシュの方なので、講義が分かりにくい時があります。SYSDATE の使用もその 1 つでした。次に、私たちの研究室でこの質問がありました。

job_id でグループ化された従業員の平均勤務期間 (日数) を表示します。誰も辞任したり解雇されたりしていないと仮定します。Oracle 日付関数 SYSDATE を使用します。

何時間にもわたる Google とスタック オーバーフローの検索の後、教授が答えなかった質問は、依然として私を困惑させました。

私はいくつか (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 FROM hr.employees GROUP BY job_id HAVING AVG(SYSDATE) - Hire_date; コマンド ラインのエラー: 4 列: 31 エラー レポート - SQL エラー: ORA-00920: 関係演算子 00920 が無効です。00000 - 「関係演算子が無効です」

私は何を間違っていますか?

4

1 に答える 1

0

job_id でグループ化された従業員の平均勤務期間 (日数) を表示します。誰も辞任したり解雇されたりしていないと仮定します。Oracle 日付関数 SYSDATE を使用します。

したがって、採用日以降に解雇された従業員がいないと仮定して、各部門の従業員の平均勤続時間を調べる以下の例を見てみましょう。また、これはすべての曜日 (週末を含む) を想定しています。

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')

しかし、質問は単純すぎるので、それほど複雑にする必要はないと思います。したがって、上記のソリューションで十分です。

于 2015-03-31T05:28:00.447 に答える