CASE関数とは
「○○円以上なら結果A,それ未満なら結果B…」
というように、条件分岐に基づいて異なる結果を返すようなクエリを作りたい場合は、CASE関数を使用します。
CASE関数は、カテゴリ分けをするときにも使われることがあります。それについては、以下にご紹介する実例を通して確認していきましょう。
CASE構文は、ほかのプログラミング言語でいうIF構文に近いものであると思うと分かりやすいかもしれません。
CASE関数のSQL構文は、基本的には以下のような形になります。
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
WHEN 条件3 THEN 結果3
...
ELSE 結果4
END
ELSEの後の「結果4」は、どの条件にも当てはまらなかった場合に返す結果です。
例えば、商品の価格によって「安」「中」「高」をカテゴリ分けしたいとすると、以下のようなクエリが考えられます。
CASE
WHEN 価格 <= 1000 THEN '安'
WHEN 価格 <= 5000 THEN '中'
ELSE '高'
END
この場合、商品価格が1000円以下の商品は「安」、1001円以上5000円以下の商品は「中」、5000円以上の商品は「高」とカテゴリ分けされます。
以上がSQLにおけるCASE関数です。Magiq上でCASEを設定したいときも、上の形を作ることをイメージしてカテゴリ、条件などを入力すれば簡単に作ることができます。
設定方法
設定は、取得フィールド選択欄右のプルダウンボタンから“CASE”を選択して行います。

注意事項
CASE内の条件は、上から順に判定されていくという特徴があります。
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
WHEN 条件3 THEN 結果3
...
ELSE 結果4
END
というクエリであれば、条件1に当てはまるか判定し、当てはまらない場合は条件2へ、それも当てはまらなければ条件3へ、さらに当てはまらなければ結果4へ…という順番です。

そのため、条件式は順序だてて作成するということに注意してください。
例えば先ほどの
CASE
WHEN 価格 <= 1000 THEN '安'
WHEN 価格 <= 5000 THEN '中'
ELSE '高'
END
の例で、一つ目の条件と二つ目の条件の順番を逆にしてしまったとします。
CASE
WHEN 価格 <= 5000 THEN '中'
WHEN 価格 <= 1000 THEN '安'
ELSE '高'
END
こうすると、1000円以上の条件の前に5000円以上の条件が判定されるため、1000円以下、例えば500円などの商品は「安」ではなく「中」に分類されてしまいます。
こうしたことを防ぐために、条件式は「高→中→安」か、「安→中→高」のように、必ず順序だてて設定する必要があります。
条件式は上から順に判定されるため、順序だてて作成する!
CASE関数 例題
商品の税込価格が1,000以下をA、2,000以下をB、それ以外をCとして抽出したい
【手順】
①テーブルを選択する
抽出したい「商品の値段の情報」が含まれている商品テーブルを選択します。
②条件分岐を設定する
取得フィールド右からCASEを選択し、クリックして条件分岐を設定していきます。
問題文に準拠して、A,B,Cの順になるように条件式を作成していきましょう。

