17/04/13

mysqlでif文を実現する


 

mysqlでif文を実現するにはCASEを利用します。
CASEには単純CASE式と、検索CASE式があります。
またENDをつけるのを忘れがちなので気をつけてください。

基本的な構文

単純CASE式

SELECT name,
CASE sex
    WHEN "1" THEN "男"
    WHEN "2" THEN "女"
ELSE "ジェンダーレス" END
FROM Test;

検索CASE式

SELECT name,
CASE WHEN sex = "1" THEN "男"
     WHEN sex = "2" THEN "女"
ELSE "ジェンダーレス" END
FROM Test;

 

単純CASE式でかける条件は、検索CASE式でもかけるので、
検索CASE式をよく使います。

ELSE句を必ず書く

ELSE句はオプションですが、指定しない場合、”ELSE NULL”という暗黙の扱いになります。
バグの温床になるのを防ぐためにも暗黙ではなく明示的に指定したほうが良いです。

SELECT句で利用する

20代を二十路、30代を三十路、それ以外を他として表示してみます。


SELECT name,
    (CASE WHEN (age >= 30 AND age < 40) THEN "三十路"
        WHEN (age >= 20 AND age < 30) THEN "二十路"
        ELSE "他" END)
FROM Test;


GROUP BY句で利用する

既存のコード体系を新しい体系に変換して表示してみます。
今回は同性の数と

SELECT count(id) as "人数",
    CASE 
        WHEN (age >= 30 AND age < 40) THEN "三十路"
        WHEN (age >= 20 AND age < 30) THEN "二十路"
        ELSE "他" END as district
FROM Test
GROUP BY district; 

+--------------+-----------+
| 人数     | district  |
+--------------+-----------+
|            1 | 三十路    |
|            2 | 二十路    |
|            1 | 他        |
+--------------+-----------+

上記ではas句を用いて、case式に別名をつけて、group by句で再利用しています。

 

実際に実行するのはこちらから
必要ない部分はコメントアウトしてください
 

 

以上です。

 

スポンサーリンク

メールアドレスが公開されることはありません。

youya66

だらけとびびり、それとちょっぴりのてきとーさ。

コアラになってだらだらしながら愛されたい。