だれでもエンジニアさんの動画で、GROUP BYを学習する
はじめに
20:51から始まる。
GROUP BYとは
データの集計に必須で、エラーを発生させてしまうことが多いらしい。
それでは早速見ていこう。
だれでもエンジニアさんが初心者の頃も、エラーになってしまうが、その原因が分からなかったそうだ。
アジェンダ
手作業時代というのは、職場の上司部下のやり取りで、GROUP BYを使えば効率化できた作業を、手作業で行なってしまっていたということだろう。
今週の日毎の会員登録数
これを手作業でやると、「2月13日と2月15日は2人で、2月16日は1人でした!」となるだろう。
SQLで、2021年2月13日の会員登録者数を数えると、以下のようになる。
残りの日付も調べれば、日毎の会員登録者数を出すことができる。
レコード数を数えたい時には、COUNTを使う。
昨年の日毎の会員登録数を出す
今ある情報は、2021年だから、昨年(2020年)の会員登録数を出す必要がある。
何月という指定がないから、昨年365日分を数えるとしたら、日が暮れてしまうだろう。
GROUP BY 爆誕。
GROUP BYを使えば、同じ値でまとめることができる。
日毎の会員登録数をチャンネルごとに出す
日毎の会員登録数は、以下のSQLで実現できる。
SELECT created_day, COUNT(name) FROM members GROUP BY created_day;
「チャンネルごとに」という場合は、どうすればいいか?
以下のようにやろうとすると、エラーが出る。
なぜエラーになるのか?
2021-02-13のchannelは、webとadの2通りあるので、表を再作成したときに、channelに何を入れればいいのか、コンピューターが分からなくなる。なので、エラーが出る。
created_dayとchannelで、それぞれGROUP BYを使ってあげれば、2021-02-13でもwebとadの2通り、集計してくれる。
ポイントは、軸になるカラムを全て、GROUP BYで指定しておくということ。
集計関数
日毎の会員登録者の平均年齢と最大年齢をどのように出すか?
AVGとMAXを使用して以下のように書くのはどうだろうか?
SELECT created_day, COUNT(name) FROM members GROUP BY AVG, MAX;
以下のような集計関数を使う。問題は、どのように使うかだ。
正解はこちら。COUNTに捉われてしまっていた。シンプルに考えて、平均と最大を出すからAVGとMAXを使えばいい。
コメントを残す