- ベストアンサー
グループ関数の問題でエラー!
下記実行結果により、エラーが出現して困っている次第です。 回答のほどよろしくお願い致します。 SQL> describe emp; 名前 NULL? 型 ------------------------------ EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NOT NULL NUMBER(2) 問1:EMP表より入社年、職種ごとの平均給与を表示しなさい。 平均給与は少数第2位を四捨五入して、$、3桁区切りカンマで表示 SELECT HIREDATE AS 入社年, JOB AS 職種 , TO_CHAR(ROUND(SAL,1),'$9,999') AS 平均給与 FROM EMP GROUP BY HIREDATE,JOB ORA-00979: GROUP BYの式ではありません 問2:上司番号と、その上司の部下の中で給与が最低である従業員の給与を表示しなさい。 上司が存在しない従業員を除き、最低給与が1000ドル以下のグループも除外とし、結果を表示。 SELECT MGR AS 上司番号, MIN(SAL) AS 最低給与, FROM EMP WHERE MGR NOT IS NULL GROUP BY MGR HAVING 1000 < SAL ORA-00936: 式がありません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
内容についての精査はしていませんが、文法についてだけお答えします。 問1 TO_CHAR(ROUND(SAL,1),'$9,999')は単一行関数なので、 TO_CHAR(AVG(ROUND(SAL,1)),'$9,999')とした方がよいでしょう 問2 (1)最低給与の後ろのカンマは余計です (2)HAVINGの後ろはグループ関数なので、 HAVING 1000 < MIN(SAL)とした方が良いでしょう。 これで取り敢えずエラーはなくなります
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
#1の指摘に加え... 問2の条件指定で使用している「 MGR NOT IS NULL 」ですが、 「 MGR IS NOT NULL 」もしくは「 NOT(MGR IS NULL) 」と書かねば なりません。
お礼
回答ありがとうございました。 ちゃんとした結果が出ました。
補足
回答ありがとうございます。 問1の方はエラーが消えました。本当に感謝します。 問2の方がまた違うエラーが出現しました。どこを修正すればエラーが消えるか分かりません。 回答のほどよろしくお願致します。 SELECT MGR AS 上司番号, MIN(SAL) AS 最低給与 FROM EMP WHERE MGR NOT IS NULL GROUP BY MGR HAVING 1000 < MIN(SAL) ORA-00920: 関係演算子が無効です