<< 目次へ
更新日:2013.4.28
フラグを立てる
「フラグ」とはデータマイニングの世界での専門用語(?)のようですが、「判定値」のようなものだと考えればよいと思います。例えば、「数学のテストが80点以上ならば合格とする」という条件があった場合:
数学のテスト得点 >= 80 ⇒ 1
数学のテスト得点 < 80 ⇒ 0
といったように、合格か否か(1:合格か0:不合格か)を判定して「フラグを立てる」などといいます。
分かりやすいようにExcelのワークシート上での例をみてみましょう。下図ではV1という変数(カラム)のそれぞれの値に対して、「偶数か奇数かの判定」を行っています。MOD関数は割り算のあまりを返す関数ですから、0ならば偶数と判定することができます。以下の例ではフラグが解釈しやすいように、「偶数⇒1、奇数⇒0」というようにしています(そのためMOD関数の戻り値を1から引いています: =1-MOD(B3,2)のように)。
■updateを使ってフラグを立てる
MySQL上でフラグを立てる方法はいくつかあるが、もっとも簡単な方法を1つ紹介しておく。それは、まず新しい空のカラムを作成しておき、update構文でそのカラムを更新(Excel上で数式を入力することに該当)を行うという方法である。
#### サンプルのテーブルtblを作成 create table tbl(V1 int); insert into tbl(V1) values(12); insert into tbl(V1) values(5); insert into tbl(V1) values(29); insert into tbl(V1) values(30); insert into tbl(V1) values(15); # ーーーーー 【作成したテーブルを確認】 mysql> select * from tbl; +------+ | V1 | +------+ | 12 | | 5 | | 29 | | 30 | | 15 | +------+ #### フラグ列FLG1を追加する alter table tbl add FLG1 int; # ーーーーー 【追加されたカラムを確認】 mysql> select * from tbl; +------+------+ | V1 | FLG1 | +------+------+ | 12 | NULL | | 5 | NULL | | 29 | NULL | | 30 | NULL | | 15 | NULL | +------+------+ #### updateを用いてフラグを立てる # 偶数⇒1,奇数⇒0とする update tbl set FLG1=1-mod(V1,2); # ーーーーー 【更新されたカラムを確認】 mysql> select * from tbl; +------+------+ | V1 | FLG1 | +------+------+ | 12 | 1 | ←「12」は偶数なので「1」のフラグがたっている | 5 | 0 | | 29 | 0 | | 30 | 1 | | 15 | 0 | +------+------+
■CASE構文で3つ以上の条件に対するフラグを立てる
3つ以上の条件判定を行う場合にはCASE構文を使うと便利である。
#### 同じ方法で3つ以上の条件判定を行う # 20以上⇒L,10以上20未満⇒M,0以上10未満⇒Sとする alter table tbl add FLG2 varchar(10); update tbl set FLG2=CASE WHEN V1>=20 THEN 'L' WHEN V1>=10 THEN 'M' WHEN V1>=0 THEN 'S' END; # ーーーーー 【新しく追加・更新されたカラムを確認】 mysql> select * from tbl; +------+------+------+ | V1 | FLG1 | FLG2 | +------+------+------+ | 12 | 1 | M | | 5 | 0 | S | | 29 | 0 | L | | 30 | 1 | L | | 15 | 0 | M | +------+------+------+
このようにMySQL上でフラグ立てを行う作業自体はさほど難しいことではない。ただ、フラグを立てるためにはそれなりの工夫が必要な場合もあり、いくつか基本的な関数(最初から実装されている関数)を知っている必要がある。必要に応じて以下のページを参照するとよいだろう。
▼MySQL本家のページ 第11章 関数と演算子
http://dev.mysql.com/doc/refman/5.1/ja/functions.html