どうも、hosigakiです!
皆さんは、コメントアウトって知っていますか?
今日はコメントアウトの活用方法をご紹介します!
目次
コメントアウトとは?
「コメントアウト」とは、クエリ内に書くことができるメモのことです。
コメントアウトは、決められた書き方を守れば、どれだけ書いてもクエリの実行結果に影響を与えません。
SELECT
user_id #この文章がコメントアウトだよ
FROM
users
コメントアウトを使いこなせば、クエリの可読性をUPさせることができるのでお勧めです!
さっそくコメントアウトの書き方を見ていきましょう!
コメントアウトの書き方
コメントアウトの書き方には、3種類あるので、お好みの書き方を使いましょう!
①コメント冒頭に # をつける
SELECT
user_id #シャープをつけると、コメントアウトになるよ
FROM
users
②コメント冒頭に -- をつける
SELECT
user_id --ハイフンを2本連続で書くと、コメントアウトになるよ
FROM
users
③コメントを /* */ で囲む
SELECT
user_id /*バックスラッシュとアスタリスクで囲むと、コメントアウトになるよ*/
FROM
users
/*
こんな感じで、コメントアウトを
2行以上書くこともできるよ
*/
コメントアウトの活用法
複雑なクエリにコメントアウトをつける
以下のようなクエリを書く際は、後から見返したときにクエリ内容の理解を助けるため、コメントアウトをつけましょう。
- たくさんのテーブルを連結したクエリ
- 複雑な条件を記載したクエリ
- 調べながら書いた、知識があやふやなクエリ
特に、自分以外の人もクエリを見る予定の場合は、理解しづらそうな部分や認識齟齬が生れそうな部分などにコメントアウトを残すことで、相手の理解を助けることができます。
■ コメントアウトがないクエリ。ぱっと見で理解しづらい。
DECLARE d1, d2 DATE;
SET d1 = "2022-8-1";
SET d2 = "2022-8-31";
WITH
purchase_user_list AS (
SELECT
user_id,
DATE(purchased_at, "Asia/Tokyo") AS purchased_date,
RANK() OVER(PARTITION BY user_id ORDER BY purchased_at) AS purchase_times
FROM
purchases
WHERE
DATE(user_created_at, "Asia/Tokyo") BETWEEN d1 AND d2
AND
DATE(purchased_at, "Asia/Tokyo") BETWEEN d1 AND d2
),
p_count AS (
SELECT
purchased_date,
COUNT(user_id) AS n_of_purchase,
SUM(CASE WHEN purchase_times >= 2 THEN 1 ELSE 0 END) AS n_of_repeat_purchase
FROM
purchase_user_list
GROUP BY
purchased_date
)
SELECT
days,
p_count.n_of_purchase,
p_count.n_of_repeat_purchase,
CASE
WHEN p_count.n_of_purchase = 0 OR p_count.n_of_purchase IS NULL THEN 0
ELSE p_count.n_of_repeat_purchase / p_count.n_of_purchase
END AS repeat_purchase_rate
FROM
unnest(GENERATE_DATE_ARRAY(d1, d2)) AS days
LEFT OUTER JOIN p_count
ON days = p_count.purchase_date
ORDER BY
days
■ コメントアウトがあるクエリ。コメントアウトの内容だけ見れば、どんな内容か想像がつく
/*d1からd2間の登録者の購入数中のリピート購入率を、購入日別で算出*/
DECLARE d1, d2 DATE;
SET d1 = "2022-8-1";
SET d2 = "2022-8-31";
WITH
--d1からd2間の登録者の購入レコード。user_id, 購入日, そのユーザーにとって何回目の購入か を算出。
purchase_user_list AS (
SELECT
user_id,
DATE(purchased_at, "Asia/Tokyo") AS purchased_date,
RANK() OVER(PARTITION BY user_id ORDER BY purchased_at) AS purchase_times
FROM
purchases
WHERE
DATE(user_created_at, "Asia/Tokyo") BETWEEN d1 AND d2
AND
DATE(purchased_at, "Asia/Tokyo") BETWEEN d1 AND d2
),
--purchase_user_listを元に、購入日別の購入数とリピート購入数を算出。
p_count AS (
SELECT
purchased_date,
COUNT(user_id) AS n_of_purchase,
SUM(CASE WHEN purchase_times >= 2 THEN 1 ELSE 0 END) AS n_of_repeat_purchase
FROM
purchase_user_list
GROUP BY
purchased_date
)
--p_countテーブルを元に、購入日別の購入数, リピート購入数, リピート購入率を算出。
SELECT
*,
CASE
WHEN n_of_purchase = 0 OR n_of_purchase IS NULL THEN 0 #0除算エラーやNULL値出力を防ぐために、率の分母が0もしくはNULLの場合は0と出力。
ELSE n_of_repeat_purchase / n_of_purchase
END AS repeat_purchase_rate
FROM
p_count
ORDER BY
purchase_date
一部のクエリをコメントアウトする
- スポットで分析しているとき
- 定点観測用のクエリを作成しているとき
などで、例えば「クエリ内の一部の条件をなくした場合の抽出結果も見ることで、違った抽出結果にならないか否かを検証したい!」って時があると思います。
そんな時は、消したいクエリ部分をコメントアウトすることで、素早くそれを検証することができるのでお勧めです!
(以下の例では、7行目と8行目をコメントアウトしています。)
SELECT
DATE(purchased_at) AS purchased_date,
SUM(CASE WHEN product_name = "干し柿" THEN 1 ELSE 0 END) AS n_of_hosigaki_purchases
FROM
purchases
WHERE
-- DATE(user_created_at, "Asia/Tokyo") BETWEEN d1 AND d2
-- AND
DATE(purchased_at, "Asia/Tokyo") BETWEEN d1 AND d2
GROUP BY
purchased_date
ORDER BY
purchased_date
コメントアウトを駆使することで、クエリの読み手の内容理解を助けたり、より効率的に分析を進めることができます。
ただし、使いすぎて文字量が多くなったら、逆に可読性が落ちてしまうので注意!
可読性を意識しながら、コメントアウトを有効活用いただけると幸いです!
ここまで読んでいただきありがとうございました!
また次の記事でお会いしましょう(^^)/