SQL取得結果に対する条件判定の方法と実践

SQL

SELECT文で取得した結果に対して、CASE式を使用することで条件判定が可能です。
条件判定を行うことで、SQL文の出力結果を変えることができます。
プログラムのIF文の判定をSQL文の中で行っているようなイメージであり、プログラムを作るまでもない運用作業で使用する他、プログラムに組み込む場合も使い方次第でプログラムの可読性・保守性を高めることができる場合があります。

なお、NULLの時に出力結果を変えるだけであればCOALESCE関数の方がスマートなので、これも併せて紹介します。

【文法】

・CASE式(単純CASE式)

SELECT~FROMの間のカラム指定の箇所で使用する。
カラムの値に応じて返す値を指定する。

CASE カラム
    WHEN 値 THEN 値
    :
    :
    :
    ELSE 値
END

・CASE式(検索CASE式)

SELECT~FROMの間のカラム指定の箇所で使用する。
式に応じて返す値を指定する。

CASE
    WHEN 式 THEN 値
    :
    :
    :
    ELSE 値
END

・COALESCE関数

SELECT~FROMの間のカラム指定の箇所で使用する。
可変長の引数を持ち、NULLではない最初の値を返す。

COALESCE(値,値…)

【対象テーブル例】

・商品

+--------+--------+--------+----------+----------+
| 商品ID | 商品名 | 在庫数 | 現在売値 | 標準売値 |
+--------+--------+--------+----------+----------+
| 1      | 商品1 | 60     | 100      | 100      |
| 2      | 商品2 | 60     | 200      | 250      |
| 3      | 商品3 | 15     | 300      | NULL     |
| 4      | 商品4 | 0      | 400      | 350      |
+--------+--------+--------+----------+----------+

【取得例】

※ASは省略可能

SELECT   商品名,
         CASE 在庫数
             WHEN 0 THEN '品切れ'
             ELSE '在庫有'
         END AS 在庫状況,
         CASE
             WHEN 標準売値 IS NULL THEN '一時品  '
             WHEN 現在売値 = 標準売値 THEN '適正価格 '
             WHEN 現在売値 < 標準売値 THEN '値下げ品 '
             ELSE '便乗値上げ'
         END AS 価格戦略,
         COALESCE(標準売値,現在売値) AS 適正価格
FROM     商品
ORDER BY 商品ID;

+--------+----------+------------+----------+
| 商品名 | 在庫状況 | 価格戦略   | 適正価格 |
+--------+----------+------------+----------+
| 商品1 | 在庫有   | 適正価格  | 100      |
| 商品2 | 在庫有   | 値下げ品  | 250      |
| 商品3 | 在庫有   | 一時品   | 300      |
| 商品4 | 品切れ   | 便乗値上げ | 350      |
+--------+----------+------------+----------+

いかがでしたでしょうか。

今回紹介した文法も、日々の保守運用作業の役に立つものです。
WHERE句以外の箇所でも条件を指定できることを知ると、SQLでの表現の幅が広がり、作業が効率的になります。

SELECT文の結果については、結果として表示される値を変えるだけでなく、その値の重複を排除したり、集計したりすることもできます。
こちらについては次回の記事で紹介したいと思います!

コメント

タイトルとURLをコピーしました