- 締切済み
グループ関数のエラーについて
下記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)
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kougasha
- ベストアンサー率32% (34/105)
having節は、GroupByで指定したものに対する条件式だからですね。 この場合は、副問い合わせが正解だと思います。
お礼
いろいろ調べた結果とりあえず解決いたしました。 ありがとうございました。
補足
回答ありがとうございました。 調べていくと原因は分かりました。 表を変えましたが、avg(sal) < salと列名を指定するとエラーになるようです。一番下にある数字を指定した場合、エラーになりません。 これはどうしてでしょうか? 回答のほどよろしくお願い致します。 1 select empno 2 from emp 3 group by empno 4* having avg(sal) < sal 5 / having avg(sal) < sal * 行4でエラーが発生しました。: ORA-00979: GROUP BYの式ではありません。 1 select empno 2 from emp 3 group by empno 4* having avg(sal) < comm SQL> / having avg(sal) < comm * 行4でエラーが発生しました。: ORA-00979: GROUP BYの式ではありません。 SQL> ed file afiedt.bufが書き込まれました。 1 select empno 2 from emp 3 group by empno 4* having avg(sal) < 100 SQL> / レコードが選択されませんでした。 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)