本文へ移動
マーケターのSQL思考 約8分で読めます

マーケターがSQLを書くとき、何が変わるのか

SQLを学ぶことで、マーケターは会議前に自らデータを確認でき、施策立案をデータに基づいて行い、効果検証を自分で実施するようになる。異常値に気づきやすくなり、エンジニアへの依頼の質も向上する。具体的なシーンを通じて、変化が実感できる。

「SQLを学ぶと何が変わるんですか?」

この問いに答えるために、現場で実際に起きた変化を具体的に書く。

理論ではなく現場の話だ。
「SQLを覚えたマーケター」が実際にどう変わったか。

これを5つのシーンで描く。


変化①:「会議の前に数字を確認できる」

SQLを学ぶ前
月次の施策レビュー会議の前日、「あの施策の数字、誰か確認してますか?」という状況になる。
エンジニアに急ぎで頼んで、数字が揃わないまま会議が始まる。「詳細は後で確認します」という言葉が飛び交う。

SQLを学んだ後
会議の前日の夜、Treasure Dataにログインして自分でSQLを実行する。
10分で「先月の新規顧客数・リピート率・CVR・上位購買商品」が手元にある。
翌朝の会議では「昨日確認したデータによると……」から話が始まる。

この変化が会議の質をどう変えるかは、想像できるだろう。


変化②:「施策の立案がデータ起点になる」

SQLを学ぶ前
「30代女性向けに何かキャンペーンをやりたい」という思いつきから施策が始まる。
30代女性という設定は「なんとなく重要そう」という直感から来ている。

SQLを学んだ後

-- 年代別・性別の購買傾向を確認する

SELECT
  age_group,
  gender,
  COUNT(DISTINCT customer_id)              AS customer_count,
  SUM(amount)                              AS total_revenue,
  ROUND(AVG(amount), 0)                    AS avg_order_value,
  ROUND(
    1.0 * COUNT(DISTINCT order_id)
    / COUNT(DISTINCT customer_id)
  , 2)                                     AS orders_per_customer
FROM orders o
JOIN customer_master c USING (customer_id)
WHERE
  o.status = 'completed'
  AND o.order_date >= DATE_ADD('day', -90, CURRENT_DATE)
GROUP BY age_group, gender
ORDER BY total_revenue DESC

このクエリを見ると「40代女性の一人あたり注文金額が他セグメントより30%高いが、顧客数は少ない」ことが分かる。
「40代女性の獲得に投資するか、30代女性のリピート率を上げるか」という問いが具体的になる。


変化③:「施策の効果検証が自分でできる」

SQLを学ぶ前
先月実施したメールキャンペーンの効果が知りたい。「エンジニアさん、メール配信リストとその後の購買データを突き合わせてほしいんですが……」と頼む。
1週間後に「配信済みCSVと購買テーブルをどう結合するかの仕様確認」が来る。

SQLを学んだ後

-- メールキャンペーン配信後30日以内の購買率を計算する

SELECT
  m.campaign_id,
  m.campaign_name,
  COUNT(DISTINCT m.customer_id)             AS total_recipients,
  COUNT(DISTINCT o.customer_id)             AS purchasers,
  ROUND(
    100.0 * COUNT(DISTINCT o.customer_id)
    / COUNT(DISTINCT m.customer_id)
  , 1)                                      AS conversion_rate_pct,
  ROUND(SUM(o.amount) / COUNT(DISTINCT o.customer_id), 0)
                                            AS avg_revenue_per_purchaser
FROM email_campaign_recipients m
LEFT JOIN orders o
  ON m.customer_id = o.customer_id
  AND o.order_date BETWEEN m.sent_date
                       AND DATE_ADD('day', 30, m.sent_date)
  AND o.status = 'completed'
GROUP BY m.campaign_id, m.campaign_name
ORDER BY conversion_rate_pct DESC

このSQLが30分で書ける。そして「メールキャンペーンAのCVRは12%、Bは8%、Cは3%」という結果が5分で返ってくる。
次の施策への学習がその日のうちに始まる。


変化④:「異常値に気づける」

SQLを学ぶ前
月次レポートに「今月の返品率3.2%」と書いてある。先月も3.1%だったから「だいたい同じ」と思って通り過ぎる。

SQLを学んだ後
「返品率」を自分で集計するとき、商品カテゴリ別に分解する習慣が自然につく。

SELECT
  product_category,
  COUNT(DISTINCT CASE WHEN status = 'returned'
    THEN order_id END)                      AS returned_orders,
  COUNT(DISTINCT order_id)                  AS total_orders,
  ROUND(
    100.0 * COUNT(DISTINCT CASE WHEN status = 'returned'
      THEN order_id END)
    / COUNT(DISTINCT order_id)
  , 1)                                      AS return_rate_pct
FROM orders
WHERE order_date >= DATE_ADD('day', -30, CURRENT_DATE)
GROUP BY product_category
ORDER BY return_rate_pct DESC

「全体では3.2%だが、あるカテゴリだけ18%の返品率になっている」

集計してみて初めて見える異常値だ。このカテゴリの商品説明と実物の乖離、あるいはサイズ・カラーの問題が示唆される。
「全体を合計して見る」と見えないものが、「分解して見る」と見えてくる。この「分解する習慣」はSQLを書くことで自然に育つ。


変化⑤:「エンジニアへの依頼の質が上がる」

SQLを学んだ後、エンジニアに頼む場面は引き続きある。
複雑なクエリ、大規模なデータ処理、パイプラインの設計

これらはエンジニアに頼む。

しかし依頼の仕方が根本的に変わる。

SQLを学ぶ前の依頼
「過去3ヶ月の顧客のデータを色々な観点で分析してほしいです。購買傾向とか、リピート率とか……」

SQLを学んだ後の依頼
「こういうSQLを書いたんですが、10万件でも1秒以内に返るようにしたいです。インデックスをどう設定すれば良いか教えてもらえますか。あとこのJOINの結果が期待と違っていて、INNER JOINをLEFT JOINに変えたら意図通りになりますか?」

エンジニアはこの依頼に「即座に答えられる」。

前者は「そもそも何をしたいのか」から確認しなければならないが、後者は純粋な技術的問いだ。

次のアクション

SQLやデータ活用を、手元で試しながら理解する

記事で読んだ考え方を、SQL練習場や関連カテゴリの記事でさらに深掘りできます。相談やご依頼もお問い合わせページから受け付けています。

SQL練習場で試す お問い合わせ

この記事を書いた人:martechfarm

Treasure Data Top Lapidarist Award受賞。

SQL / Digdag / Python / CDP設計 / CRM設計を横断し、企業のデータ活用を支援。

実績・支援内容を見る →

MarTech Farmをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む