<< トップページへ

<< 目次へ

更新日: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