みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

締切り済みの質問

POSTGRESでMYSQLと同じ結果を得る方法

create table test (a varchar(10), b varchar(10));
insert into test values ('a','a');
insert into test values ('b','b');
insert into test values ('b','c');
insert into test values ('c','d');
select count(*), a, b from test group by a;

上記を実行するとMYSQLでは
+----------+------+------+
| count(*) | a | b |
+----------+------+------+
| 1 | a | a |
| 2 | b | b |
| 1 | c | d |
+----------+------+------+
という結果になる。

POSTGRESでは以下のエラーになります。
ERROR: column "test.b" must appear in the GROUP BY clause or be used in an aggr
egate function

select count(*), a, b from test group by a, b; とすると結果が変わってしまいます。
MYSQLと同じ結果をPOSTGRESで得るいい方法はありますか?

投稿日時 - 2011-08-22 22:08:06

QNo.6960741

暇なときに回答ください

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

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

回答(1)

ANo.1

まずMySQLの「GROUP BYで指定されていない項目を集計関数なしに指定できる」というのがSQLの規格から外れていることを認識してください。
その上で
http://postoro.blogspot.com/2011/03/mysql-group-by-select.html
にありますけれど、どの行の値が使われるかは保証されません。

もし、MySQLの項目で最小値を表示したいということなら

select count(*), a, min(b) from test group by a;

にすればMySQL、PostgreSQLともに同一の結果を取得できます。

投稿日時 - 2011-08-22 23:25:44

あなたにオススメの質問