MW211 EXIT

devlog
PostgreSQL/表から該当項目数を求める
2012年10月07日
┌──────────────────────────────────────┐
│┌────┬────┬────┬────┬────┐                        │
││  キー  │  枝番  │小条件1 │小条件2 │小条件3 │                        │
│├────┼────┼────┼────┼────┤┐                      │
││   A   │    1   │   ○   │        │        ││                      │
│├────┼────┼────┼────┼────┤│                      │
││   A   │    2   │        │        │   ○   ││                      │
│├────┼────┼────┼────┼────┤│グループ              │
││   A   │    3   │   ○   │   ○   │        ││                      │
│├────┼────┼────┼────┼────┤│                      │
││   A   │    4   │        │        │   ○   ││                      │
│├────┼────┼────┼────┼────┤┘                      │
││   B   │    1   │        │   ○   │        │                        │
│└────┴────┴────┴────┴────┘                        │
│                    └──────────────┘                        │
│                               フィールド                                   │
└──────────────────────────────────────┘
上記のようなテーブルから、グループ毎に○の数を求めるSQL文。(Aなら5つ)

┌──────────────────────────────────────┐
│SELECT キー,                                                                │
│         SUM(CASE WHEN 小条件1 = TRUE THEN 1 ELSE 0 END)                    │
│       + SUM(CASE WHEN 小条件2 = TRUE THEN 1 ELSE 0 END)                    │
│       + SUM(CASE WHEN 小条件3 = TRUE THEN 1 ELSE 0 END) AS 件数            │
│    FROM 表                                                                 │
│    WHERE 大条件 = TRUE                                                     │
│    GROUP BY キー;                                                          │
└──────────────────────────────────────┘
SUM()の中で、CASE文を使えば簡単にできる(文自体は長文になるけど)。
分類:PostgreSQL