• ベストアンサー
  • 暇なときにでも

グループ関数の問題でエラー!

下記実行結果により、エラーが出現して困っている次第です。 回答のほどよろしくお願い致します。 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
  • 閲覧数874
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • NAATAN
  • ベストアンサー率33% (57/170)

内容についての精査はしていませんが、文法についてだけお答えします。 問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の方はエラーが消えました。本当に感謝します。 問2の方がまた違うエラーが出現しました。どこを修正すればエラーが消えるか分かりません。 回答のほどよろしくお願致します。 SELECT MGR AS 上司番号, MIN(SAL) AS 最低給与 FROM EMP WHERE MGR NOT IS NULL GROUP BY MGR HAVING 1000 < MIN(SAL) ORA-00920: 関係演算子が無効です

関連するQ&A

  • エラー「単一グループのグループ関数ではありません」

    エラーをどうやれば修正できるかわかりません。 回答のほどよろしくお願いいたします。 SELECT EMPNO, ENAME, DEPTNO, SAL FROM EMP HAVING AVG(SAL) >ANY (SELECT SAL FROM EMP WHERE HIREDATE LIKE '82%') 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)

  • エラー2「無効な識別子です」

    ORA-00904: "D"."DEPT": 無効な識別子です。 先ほども似たような質問をしましたが原因がよく分からないなのでご存知の方教えていただければ幸いです。 SELECT D.DEPTNO, E.ENAME, E.SAL FROM EMP E, DEPT D WHERE E.SAL >ANY (SELECT MAX(E.SAL) FROM DEPT D, EMP E GROUP BY D.DEPT) 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) SQL> DESCRIBE DEPT; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13)

  • エラー「無効な識別子です」

    ORA-00904: "EMPNO": 無効な識別子です と表示されます。 解決方法知っている方、教えていただければ幸いです。 SELECT EMPNO, ENAME, D.DEPTNO, DNAME FROM DEPT D WHERE EMPNO = (SELECT EMPNO FROM EMP WHERE MGR IS NULL) 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)

  • 回答No.2

#1の指摘に加え... 問2の条件指定で使用している「 MGR NOT IS NULL 」ですが、 「 MGR IS NOT NULL 」もしくは「 NOT(MGR IS NULL) 」と書かねば なりません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございました。 ちゃんとした結果が出ました。

関連するQ&A

  • updateについて

    下記、SQLコマンドを実行するとMERTINの歩合給がSMITHのSALに格納されません。実行後、NULLが入ってしまいます。 ちゃんとemp表のMERTINのCOMMには値が入っているのになぜ実行結果がうまくいかないのでしょうか? 回答のほどよろしくお願い致します。 update w_emp set sal = (select comm from emp where ename = 'MERTIN') where sal < 1000 SQL> select * from w_emp; DEPTNO EMPNO ENAME JOB SAL 20 7902 FORD ANALYST 3000 20 7369 SMITH CLERK 10行が選択されました。 SQL> desc w_emp; 名前 NULL? 型 DEPTNO NOT NULL NUMBER(2) EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) SAL NUMBER(7,2) SQL> desc 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)

  • 自己結合について

    下記SQL文のSELECT句、m.empnoによって左項DEPTNOのMGR値がきちんと出力される理屈がよく分かりません。 回答のほどよろしくお願い致します。 select e.empno, m.empno from emp e join emp m on(e.mgr = m.empno) EMPNO EMPNO ---------- ---------- 7698 7839 7782 7839 7566 7839 7902 7566 7369 7902 7499 7698 7521 7698 7654 7698 7788 7566 7844 7698 7876 7788 7900 7698 7934 7782 13行が選択されました。 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)

  • DBの操作

    DEPTNO,JOB順に抽出し、DEPTNO,JOB毎にSAL(給与)の集計を出力せよ。 ※JOB(小計),DEPTNO(中計),総計も出力するスクリプトを書きたいのですが初心者 なので、よくわかりません。 EMP表の定義 --------------------------------------- ---------------------------- 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 NUMBER(2) プロバイダ参照: サーバのOS:WINサーバ パソコンのOS:WinNT系 エディタ:hidemaru FTPソフト: サーバ移転:していない 改造:(未選択) 改造前不動 CGI習熟度:firsttime

    • ベストアンサー
    • Perl
  • グループ関数のエラーについて

    下記SQLを実行するとエラーが返ってきます。 構文は合っていると思うのですが何故でしょうか。 1 select nation 2 from nation 3 group by nation 4* having area > avg(area) SQL> / having area > avg(area) * 行4でエラーが発生しました。: ORA-00979: GROUP BYの式ではありません。 副問合せをするとうまくいきました。 1 select nation 2 from nation 3* where area >(select avg(area) from nation) どちらの方法も同じ考え方だと思うのですが、上のやり方でエラーが出る理由を教えてほしいです。 回答のほどよろしくお願い致します。 SQL> desc nation; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- CODE NOT NULL NUMBER(5) NATION NOT NULL VARCHAR2(28) CAPITAL VARCHAR2(20) AREA NUMBER(22) POPULATION NUMBER(22)

  • グループ関数の結果について

    以下、SQLコマンドを入力するとレコードが選択されない結果になってしまいます。areaの平均より高いものが出力されるはずなのですが何故でしょうか? / 1 select nation,area 2 from nation 3 group by nation, area 4* having area > avg(area) SQL> / レコードが選択されませんでした。 SQL> desc nation; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- CODE NOT NULL NUMBER(5) NATION NOT NULL VARCHAR2(28) CAPITAL VARCHAR2(20) AREA NUMBER(22) POPULATION NUMBER(22)

  • SQL Plusで項目名が最後まで表示されない?

    下記のコマンドを入力後、実行結果を見ると項目の部分が切れています。これを正しく表示するにはどうすればいいでしょうか? 回答のほどよろしくお願い致します。 SELECT TO_CHAR(HIREDATE,'RR') AS 入社年, JOB AS 職種 , TO_CHAR(AVG(ROUND(SAL,1)),'$9,999') AS 平均給与 FROM EMP GROUP BY TO_CHAR(HIREDATE,'RR') ,JOB 入 職種 平均給 -- --------- ------- 80 CLERK $800 81 CLERK $950 81 ANALYST $3,000 81 MANAGER $2,758 81 SALESMAN $1,400 81 PRESIDENT $5,000 82 CLERK $1,300 82 ANALYST $3,000 83 CLERK $1,100

  • CASE文のエラーについて

    下記のように打つと「行1でエラーが発生しました。: ORA-00905: キーワードがありません」というエラーが表示されます。どうすればいいでしょうか? SELECT ENAME AS 名前, SAL AS 給与, CASE SAL WHEN SAL <= 1100 THEN SAL * 1.055 WHEN SAL <=1400 THEN SAL * 1.05 WHEN SAL <=3000 THEN SAL * 1.0 ELSE SAL*1.045 AS 昇給率 FROM EMP;

  • SQLの問題で解答を見ても腑に落ちません

    問題集の答えが腑に落ちないのでどなたかわかりやすく説明いただけますでしょうか? EMP表 EMPNO ENAME  SAL   MGR  DEPTNO -------------------------------------- 1000  SCOTT  1000  NULL  10 1010  ADAMS  2000  1000  10 1030  TAYLOR  600   1000  30 1050  MILLER  800   1030  10 以下の副問い合わせを使ったSELECT文を実行した。検索されるデータ件数を選びなさい。 select empno,ename from emp where empno not in (select mgr from emp); A:0件 B:1件 C:2件 D:3件 解答はAの0件なのですが、なぜ0件なのでしょうか? 当方の解釈ですと、副問い合わせでmgrが(NULL,1000,1030)となり where empno not in (NULL,1000,1030) で 「empnoがNULLでも1000でも1030でもない件数」 となり、empnoが1010と1050の行が検索され、cの2件が正解なのでは? と思っているのですが・・・ 間違いをわかりやすく教えていただけますでしょうか? 宜しくお願いします。

  • DBエラー 右カッコがありません

    BLOB型を用いたテーブルを作成したいのですが、 create文を発行したところ、エラーが発生しました。 ORA-00907右カッコがありません。 と出てしまいます。 わかるかたがいらっしゃいましたらご教授いただきたいです。 よろしくお願いします。 CREATE TABLE BLOB_BOOK ( ID NUMBER(5) NOT NULL, TITLE VARCHAR2(100), AUTHOR VARCHAR2(30), PRICE NUMBER(9), EVALUATION VARCHAR2(1), URL VARCHAR2(255), FILENAME BLOB(4M), CONSTRAINT BLOB_BOOK_IDX0 PRIMARY KEY ( ID ) )

  • group by句について

    すいません。教えてください。 emp表からJobのデータが何種類あるか出力したいとき、 ・ select count(distinct job) from emp; はいいのに、 ・ select count(job) from emp group by job; がエラーになる理由を知っている方、教えてください。