どうも、hosigakiです!
今日は「GROUP BY句」に関する、ちょっとしたテクニックをご紹介します!
(検証環境:BigQuery)
基本的なGROUP BY句の使い方
GROUP BY句については、過去にこちらの記事で解説しました!
ここでは簡単に、GROUP BY句の基本的な使い方をおさらいしましょう!
id | product | user_id | gender | age | purchased_at |
---|---|---|---|---|---|
1 | 干し柿 | 10 | 男性 | 30 | 2022-1-1 |
2 | 干し柿ジュース | 10 | 男性 | 30 | 2022-1-1 |
3 | 柿まんじゅう | 10 | 男性 | 30 | 2022-1-1 |
4 | 干し柿 | 11 | 女性 | 32 | 2022-1-3 |
5 | 柿まんじゅう | 11 | 女性 | 32 | 2022-1-3 |
6 | 干し柿 | 12 | 男性 | 40 | 2022-1-4 |
例えば、上記のpurchasesテーブルから、「user_id」ごとの購入数を抽出するとします。
この時、以下のように「GROUP BY句」を用いることで、user_idごとの集計が可能になります。
SELECT
user_id,
COUNT(user_id) AS num_of_purchases
FROM
purchases
GROUP BY
user_id
user_id | num_of_purchases |
---|---|
10 | 3 |
11 | 2 |
12 | 1 |
GROUP BYで、付加情報もつけよう!
ここからが今日の本題です!
先ほどの抽出結果で、user_idの隣に、性別や年齢などの付加情報もつけたら、よりユーザーの特徴が掴めて良いと思いませんか?
user_id | gender | age | num_of_purchases |
---|---|---|---|
10 | 男性 | 30 | 3 |
11 | 女性 | 32 | 2 |
12 | 男性 | 40 | 1 |
実は、以下のようなクエリを書くことで、上記のような抽出結果にすることができるんです!
先ほどのクエリとの違い、どこか分かるでしょうか?
SELECT
user_id,
gender,
age,
COUNT(user_id) AS num_of_purchases
FROM
purchases
GROUP BY
user_id,
gender,
age
先ほどとの違いは、GROUP BY句とSELECT句に、gender
とage
が入っている点です。
注目していただきたいのはGROUP BY句の方で、ここでは以下のようにグループ化を行っています。
① user_idごとにレコードをグループ分け (user_idは三種類あるため、できるグループも3つ) ↓ ② ①の各グループ内で、さらにgenderごとにレコードをグループ分け (実際には①の各グループごとに一種類のgenderの値しかないため、できるグループも1つずつ) ↓ ③ ②の各グループ内で、さらにageごとにレコードをグループ分け (実際には②の各グループごとに一種類のageの値しかないため、できるグループも1つずつ)
グループ化を行ったら、group by句で書いたのと同じカラムをSELECT句にも書き、その下に集約関数を書いて、完成です!
今日はGROUP BY句のちょっとしたテクニックを紹介しました!
ここまで読んでくださりありがとうございました!
また次の記事でお会いしましょう(^^)/