LAMPのお勉強日記 (9)
LAMP環境のお勉強日記
目的
- 自分が何をやったのか記録する
- 自分が何を出来るのか公開する
はじめに
>mysql -u root -p
Enter password:[パスワード]
mysql>
使用するデータベースを指定する
mysql>use db1
今日学んだこと
基本となるテーブル
mysql>select * from tb1; +------+------+------+ | bang | uria | tuki | +------+------+------+ | a103 | 101 | 4 | | a102 | 54 | 5 | | a104 | 181 | 4 | | a101 | 184 | 4 | | a103 | 17 | 5 | | a101 | 300 | 5 | | a102 | 205 | 6 | | a104 | 93 | 5 | | a103 | 12 | 6 | | a107 | 87 | 6 | +------+------+------+
グループ化
カラム「bang」のように、同じ番号がいくつか並んでいる場合、それらをグループ化できる。
「select [カラム名] from [テーブル名] group by [グループ化するカラム];」
ex) mysql>select * from tb1 group by bang; +------+------+------+ | bang | uria | tuki | +------+------+------+ | a101 | 184 | 4 | | a102 | 54 | 5 | | a103 | 101 | 4 | | a104 | 181 | 4 | | a107 | 87 | 6 | +------+------+------+
抽出されたデータは、カラムbangでは重複しないデータだが、重複するデータの中では任意のデータが選ばれている。
グループごとの数を数える
「count」関数を使う
ex) mysql>select count(*) from tb1 group by bang; +----------+ | count(*) | +----------+ | 2 | | 2 | | 3 | | 2 | | 1 | +----------+
わかりにくいので、改変。
ex) mysql>select bang,count(*) as '件数' from tb1 group by bang; +------+------+ | bang | 件数 | +------+------+ | a101 | 2 | | a102 | 2 | | a103 | 3 | | a104 | 2 | | a107 | 1 | +------+------+
グループごとの合計を出す
「sum()」関数を使う
ex)カラム「uria」の合計を出してみる mysql>select bang,sum(uria) as '合計' from tb1 group by bang; +------+------+ | bang | 合計 | +------+------+ | a101 | 484 | | a102 | 259 | | a103 | 130 | | a104 | 274 | | a107 | 87 | +------+------+
グループごとの平均を出す
「avg()」関数を使う
ex)カラム「uria」の平均を出してみる mysql>select bang,avg(uria) as '平均' from tb1 group by bang; +------+----------+ | bang | 平均 | +------+----------+ | a101 | 242.0000 | | a102 | 129.5000 | | a103 | 43.3333 | | a104 | 137.0000 | | a107 | 87.0000 | +------+----------+
条件付きグループで表示する
「having」を使う
「select [集計したカラム] from [テーブル名] group by [グループ化するカラム] having 条件;」
ex)合計が200以上のグループだけ表示する mysql>select bang,sum(uria) from tb1 group by bang having sum(uria)>=200; +------+-----------+ | bang | sum(uria) | +------+-----------+ | a101 | 484 | | a102 | 259 | | a104 | 274 | +------+-----------+ ex)以下と比較 mysql>select bang,sum(uria) from tb1 group by bang; +------+-----------+ | bang | sum(uria) | +------+-----------+ | a101 | 484 | | a102 | 259 | | a103 | 130 | | a104 | 274 | | a107 | 87 | +------+-----------+
抽出してからグループ化する
「where」を使う。
ex)カラム「uria」が50以上のデータを抽出しグループ化して平均を取る mysql>select bang,avg(uria) from tb1 where uria>=50 group by bang; +------+-----------+ | bang | avg(uria) | +------+-----------+ | a101 | 242.0000 | | a102 | 129.5000 | | a103 | 101.0000 | | a104 | 137.0000 | | a107 | 87.0000 | +------+-----------+
カラム「bang」で「a103」に該当するカラム「uria」のデータは、「101」「17」「12」ですが、後ろの二つは50以下なので抽出されず、結果として「a103」に対応する「avg(uria)」は「101」となります。
グループ化してから並び替える
ex)bangとavg(uria)を表示するけど、group by bangでグループ化して、order by avg(uria) descで昇順に並べるよ mysql>select bang,avg(uria) from tb1 group by bang order by avg(uria) desc; +------+-----------+ | bang | avg(uria) | +------+-----------+ | a101 | 242.0000 | | a104 | 137.0000 | | a102 | 129.5000 | | a107 | 87.0000 | | a103 | 43.3333 | +------+-----------+
並べる順番
「where」
↓
「group by」
↓
「order by ○○ (desc)」
ex) mysql>select bang,avg(uria) from tb1 where uria>=50 group by bang order by avg(uria) desc; +------+-----------+ | bang | avg(uria) | +------+-----------+ | a101 | 242.0000 | | a104 | 137.0000 | | a102 | 129.5000 | | a103 | 101.0000 | | a107 | 87.0000 | +------+-----------+
今回はここまで。
次回は、データの編集から。