電子書籍の厳選無料作品が豊富!

下記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)

A 回答 (1件)

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)

補足日時:2005/08/07 22:09
    • good
    • 0
この回答へのお礼

いろいろ調べた結果とりあえず解決いたしました。
ありがとうございました。

お礼日時:2005/08/08 21:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!