MW211 EXIT

devlog
PostgreSQL/最大値を更新(1)
2012年06月13日
「更新表.最大」に「入力表.値」を更新しようとするのだが、
「入力表.値」が「更新表.最大」よりも大きい時という条件が付く場合。
(最大値を随時比較して更新していく場合などがこのパターンとなるだろう)
┌──────────────────────────────────────┐
│UPDATE 更新表                                                               │
│  SET 最大 = COALESCE((SELECT 入力表.値                                     │
│                         FROM 入力表                                        │
│                         WHERE 入力表.キー = 更新表.キー                    │
│                           AND (入力表.値 > 更新表.最大                     │
│                             OR 更新表.最大 IS NULL)                        │
│                      ),                                                    │
│                      最大);                                                │
└──────────────────────────────────────┘

「入力表.値」が複数あって最大値を集計した上でという場合には以下の通り。
┌──────────────────────────────────────┐
│UPDATE 更新表                                                               │
│  SET 最大 = COALESCE((SELECT MAX(入力表.値)                                │
│                         FROM 入力表                                        │
│                         WHERE 入力表.キー = 更新表.キー                    │
│                         HAVING MAX(入力表.値) > 更新表.最大                │
│                             OR 更新表.最大 IS NULL                         │
│                      ),                                                    │
│                      最大);                                                │
└──────────────────────────────────────┘

もしかしてもっと簡単な方法がある?
分類:PostgreSQL