たとえば、いつも使っている、ここの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になる
(ただし、後者は、本当にそういうものを意図しているのか?は疑問)