3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

group by 節のカラムを省略する

Posted at

postgres 9.1 から group by 節のキー以外のカラムを省略できるようになったそうです。

GROUP BY が MySQL 風に緩めに
GROUP BY にプライマリキーが指定されていれば、それ以外の列は GROUP BY に指定しなくても、SELECT 句に書けるようになりました。具体的には
CREATE TABLE tbl (pk integer PRIMARY KEY, t text, i integer);
SELECT pk, t, sum(i) FROM tbl GROUP BY pk;
は、9.0 以前ではエラーになりましたが、9.1 では受け付けられます。 9.0 以前では、t 列も GROUP BY に書く必要があります。
標準SQLでは関数従属性を加味した、このような省略が許されており、9.1 ではその部分的な実装 (プライマリキーのみ) が実装されました。キーの一意性がチェックされるため、省略した列がランダムに選択されることはありません。 MySQLではさらに制限が緩く、なんでも許されてしまうため、「なぜ PostgreSQL では受け付けないのか?」という質問が良くありました。ある程度の互換性が向上したと思われます。

この機能を知らず知らず使っていました。そのせいで postgres 9.3 では成功しているのに、postgres 9.0 ではエラーになるコードを書いてしまいました。超はまりました。自分が管理していない共用データベースなどを使う場合は注意が必要だと思います。

その他 9.1 で更新された機能の解説
http://lets.postgresql.jp/documents/technical/9.1/1

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?