LoginSignup
3
2

More than 3 years have passed since last update.

開発者でもなくデータアナリストでもなく企画職が使うべきSQL①

Last updated at Posted at 2018-11-23

はじめに

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;

演算子の書き方

等しい:=
等しくない:<>
より大きい:>
未満:<
以上:>=
以下:<= 
abの間: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;

終わり

テーブルちゃんと作ってから記事を書いた方がよかったなと反省。
集約関数を続きとして記載したいと思います。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2