こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

グループ関数のエラーについて

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

投稿日時 - 2005-08-07 21:49:43

QNo.1565822

暇なときに回答ください

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

ANo.1

having節は、GroupByで指定したものに対する条件式だからですね。
この場合は、副問い合わせが正解だと思います。

投稿日時 - 2005-08-07 21:56:54

補足

回答ありがとうございました。
調べていくと原因は分かりました。
表を変えましたが、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:33

お礼

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

投稿日時 - 2005-08-08 21:46:48

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-