だれでもエンジニアさんの動画で、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を使えばいい。

コメントを残す