これはなに
SQLのWITH句を覚えたのでメモを残す
筆者
- 非エンジニア(マーケティング職)
- SQLをお勉強中
WITH句とはなんぞや
SQL文内で新たにテーブルを作り、名前を付けることが出来る句のこと。
WITH句で呼び出したテーブルのことをCTE(共通テーブル式)と言うらしい。
WITH句を使って再帰呼び出しすることを再帰WITH句と言ったり、
呼び出したテーブルを再帰共通表式(テーブル)と言ったりするらしいです。
WITH句の書き方
with
'作成するテーブル名'
AS
(
'作成するテーブルを作るクエリ'
)
使用例
やりたいこと
- 商品購入数が多いユーザー上位3名のメールアドレスを抽出する
テーブル
テーブル①:purchase
| purchase_id | user_id | quantity |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 3 | 5 |
| 4 | 2 | 2 |
| 5 | 2 | 1 |
| 6 | 4 | 1 |
| 7 | 3 | 1 |
| 8 | 5 | 2 |
| 9 | 1 | 3 |
| 10 | 6 | 1 |
テーブル②:user
| user_id | |
|---|---|
| 1 | cham.hoge@gmail.com |
| 2 | cham.test@gmail.com |
| 3 | cham.qiita@gmail.com |
| 4 | chamcham.qiita@gmail.com |
| 5 | cham.hogehoge@gmail.com |
WITH句を使ったクエリ
WITH
puchase_quantity_top3_users
AS (
SELECT
purchase_id
sum(quantity)
FROM
purchase
GROUP BY 1
ORDER BY 2 DESC
LIMIT 3
),
SELECT
email
FROM
user
JOIN
puchase_quantity_top3_users
ON
user.user_id=puchase_quantity_top3_users.user_id;
出力結果
| cham.qiita@gmail.com |
| cham.hoge@gmail.com |
| cham.test@gmail.com |
メモ
- WITH句で定義したテーブルは何度も使える
- JOIN句でサブクエリ書くより読みやすい