goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

MySQLではOKなのに「ORA-00979: GROUP BY の式ではありません」が出る理由

2010-03-02 16:40:00 | そのほか

 たとえば、いつも使っている、ここのHello_World_tableで、

   select count(no),language,message From hello_world_table group by language

 と実行すると、MySQLでは、正常に動作するのに、

 ORACLEだと、

    ORA-00979: GROUP BY の式ではありません

 と出て、エラーになる。

 この理由についてというか、このエラーの意味について、ちゃんと書いているサイトがなかったので、ここに書いてみる。




■このエラーの出るわけ

はじめてのSQL 69ページ(以下斜体は引用)

 ただし、集合関数を使うなら、集合関数のほかに問い合わせ指定できるのは、GROUP BY句に使った列だけです。


 つまり、上記の例だと、count(no)のNO以外で、このSELECTの列に指定できるのは、GROUP BYに書かれた、languageだけであり、messageを指定することは出来ない。

 したがって、

select count(no),language From hello_world_table group by language



select count(no),language,message From hello_world_table group by language,message

は実行可能であるが、Group Byに入っていないmessageがSELECTの列に入っている

select count(no),language,message From hello_world_table group by language

はORACLEの場合は、エラーになる




■注意!

 しかし、ここで
select count(no),language,message From hello_world_table group by language,message

select count(no),language,message From hello_world_table group by language

は、本体意味が違うので注意。

MySQLで

INSERT INTO HELLO_WORLD_TABLE VALUES (3,"日本語","こんにちは 日本");

を追加した場合、

select count(no),language,message From hello_world_table group by language,message

の結果は、3行出てきて、Count(no)はすべて1になるが、

select count(no),language,message From hello_world_table group by language

を実行すると、2行しか出てこないで、Count(no)は、日本語が2、英語が1になる
(ただし、後者は、本当にそういうものを意図しているのか?は疑問)

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« パッケージマネージャーもapt... | トップ | 「Twitterで歌詞をつぶやいた... »
最新の画像もっと見る

そのほか」カテゴリの最新記事