はじめに
TableauなどのBIツールなどが普及していていて、いまやSQLなどかけなくても簡単にデータマートからデータ抽出して可視化して、というのがとても簡単になっています。
とはいえ、僕は企画職がSQLを触れることはとても大事だと思っています。
本記事は、企画職が使うべきSQLについて記載していきたいと思います。
なぜこんな記事を書くのか。とりあえず思っていること
-普段仕事でデータ分析をしていて、企画者から「このデータ出して」という依頼をとても多くもらう
- 偏見もありますが、BIの普及があるもののまだまだ浸透はしていません。そのため、DWHがあっても用途別マートを用意している企業はまだまだ少ない印象
- マートはあれど、必ずしも全てのデータがマートに存在しているわけではない
- BIツールも安くていいものがどんどんできていて、ツールの切り替えが早く、都度キャッチアップが必要なため定着していない
- 結果として多くの企画者は、SQLを叩ける人にデータ抽出をしてもらい、抽出してもらったexcelやcsvで仕事をしていたりします(excel自体はとても便利です)
- 一方でデザイン思考などの考えから、MVP(検証可能な最低限のプロダクト)を量産するという考え方が広まっていることから、いちいちデータ抽出してもらうのを待っているわけにも行かず
などなどサラリーマンならではの悩みというか煩わしさというか、ありそうだなと思っているので、僕はデータ抽出をあまり拒まないようにしてます。苦笑
でも本当は難しい関数はいいとして最低限のSQLは使えた方がいいと思っています。何なら営業職だって使えた方がいいと思ってます。
服の採寸だって、エアコンの温度だって、体調管理だって、データとして保持されている世の中でデータを活用できることは武器になると思っているからです。
SQLの書き方の前に、その前提を記載しておきます
※テーブル名はmy_infoと仮定します。10日分の以下データとします。
※カラム(要素) は毎晩夜に記録している1体重2身長3体脂肪4睡眠時間5摂取カロリー6宿泊エリアとします
※特に何でもいいですがpostgresqlとします
ということで大基本select
とりあえず全部抽出
テーブルから(from)から見たい項目を選ぶだけ(select)
全部の場合はアスタリスクで大丈夫。
select * from my_info;
体重と身長だけ抽出
select weight,height from my_info;
とりあえず3日分(=3行分=3レコード分)
みるレコード数のlimit(上限)を追記するだけ
select weight,height
from my_info
limit 3;
(このテーブルだと必要ないけど)レコード数を見てみる
select count(*) from my_info;
条件をつけて絞る
whereで条件をつける
select weight
from my_info
where weight >= 75;
演算子の書き方
等しい:=
等しくない:<>
より大きい:>
未満:<
以上:>=
以下:<=
aとbの間:between a and b
複数条件
and,orでくっつけるだけ
select weight
from my_info
where weight >= 75
and kcal >= 3000;
条件の否定
notをつけるだけ
select weight
from my_info
where not weight >= 75;
条件を複数項目指定
in ()の中に合致するものはありませんかーとするだけ
select weight
from my_info
where sleeping_area in ('living','dining','bedroom');
条件の文字列指定
文字が部分的にあってればOKという時は以下のようにします。
「%」の所には0文字以上の文字が入ります。
1文字以上にしたい時は「_」を使います。
select weight
from my_info
where sleeping_area = '%room';
並び替え
csvかエクセル出力することがほとんどなので、sqlで並び替えも必要ないということも言われますすが、どうせやるならsqlからやってしまった方がいいといつも思ってます。
体重の軽い順
order byに続く要素で、並び替え
select weight
from my_info
order by weight;
体重の重い順
select weight
from my_info
order by weight desc;
身長も高い順で、さらに体重の重い順
select weight
from my_info
order by height desc, weight desc;
基本の基本はこれだけ
ここでの注意点は、where節はorder by節の前に書くという点です。
limitは全部の条件を書いた上で最後に記述を行います。
まとめると
select kcal
from my_info
where sleeping_area = '%room'
order by height desc, weight desc
limit 3;
終わり
テーブルちゃんと作ってから記事を書いた方がよかったなと反省。
集約関数を続きとして記載したいと思います。