MW211 EXIT

devlog
PostgreSQL/0を除く最小値(2)
2012年05月30日
ということで、NULLを含む列についての0を除く最小値を求める方法。
┌──────────────────────────────────────┐
│SELECT CASE                                                                 │
│           WHEN MIN(列) IS NULL THEN NULL                                   │
│           ELSE                                                             │
│               COALESCE(MIN(CASE                                            │
│                                WHEN 列 = 0 THEN NULL                       │
│                                ELSE             列                         │
│                            END), 0)                                        │
│       END AS 列                                                            │
│    FROM 表                                                                 │
│    GROUP BY キー                                                           │
└──────────────────────────────────────┘
ちと条件分岐が強引か。。。

すべてNULLならNULL、1以上を一つでも含んでいればその最小値、
さもなくば0となる。(なんか初心者のような条件分岐の説明だなぁ)

とにかくやりたいことは満たせるはず。

ちなみに、すべてNULLを判定する式は一般的にはCOUNT()を使うのが自然かも。
┌──────────────────────────────────────┐
│SELECT CASE                                                                 │
│           WHEN COUNT(列) = 0 THEN NULL                                     │
│           ELSE                                                             │
│               COALESCE(MIN(CASE                                            │
│                                WHEN 列 = 0 THEN NULL                       │
│                                ELSE             列                         │
│                            END), 0)                                        │
│       END AS 列                                                            │
│    FROM 表                                                                 │
│    GROUP BY キー                                                           │
└──────────────────────────────────────┘
ま、意図するところを伝えるのなら前出のMIN()の方がわかりやすいかな。
分類:PostgreSQL