← Back to Academia

12.11 - SQL для маркетолога - основы

SQL - самый ценный hard skill для маркетолога после Excel. Один SQL-запрос заменяет 30 минут в интерфейсе GA4.

#intermediate #technical #block-12


Навигация

12.10 - Частые ошибки в A-B-тестах | → 12.12 - SQL - продвинутые запросы


Зачем маркетологу SQL

  • Самостоятельный доступ к данным без аналитика
  • BigQuery (GA4 export) → любой отчёт, который не существует в интерфейсе
  • CRM-база: сегментация, когорты, RFM
  • Автоматизация отчётов (SQL + Looker Studio)

Основы: SELECT → FROM → WHERE → GROUP BY

-- Сколько покупок по каналам за последний месяц? SELECT traffic_source, COUNT(*) AS purchases, SUM(revenue) AS total_revenue, AVG(revenue) AS avg_order_value FROM orders WHERE order_date >= '2024-01-01' AND order_date < '2024-02-01' AND status = 'completed' GROUP BY traffic_source ORDER BY total_revenue DESC;

Порядок выполнения SQL

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

Ключевые операторы

JOIN - объединение таблиц

-- Заказы + данные клиентов SELECT o.order_id, o.revenue, c.email, c.registration_date, c.city FROM orders o JOIN customers c ON o.customer_id = c.id WHERE o.order_date >= '2024-01-01';
Тип JOINЧто возвращает
INNER JOINТолько совпадающие строки
LEFT JOINВсе из левой + совпадающие из правой
RIGHT JOINВсе из правой + совпадающие из левой
FULL JOINВсе строки из обеих таблиц

Агрегатные функции

ФункцияОписание
COUNT(*)Количество строк
SUM(column)Сумма
AVG(column)Среднее
MIN(column) / MAX(column)Мин / Макс
COUNT(DISTINCT column)Уникальные значения

WHERE - фильтрация

WHERE status = 'completed' -- равно AND revenue > 10000 -- больше AND city IN ('Алматы', 'Астана') -- в списке AND email IS NOT NULL -- не пусто AND order_date BETWEEN '2024-01-01' AND '2024-01-31' -- диапазон AND product_name LIKE '%Samsung%' -- содержит

GROUP BY + HAVING

-- Клиенты с 3+ покупками (VIP) SELECT customer_id, COUNT(*) AS order_count, SUM(revenue) AS total_spent FROM orders WHERE status = 'completed' GROUP BY customer_id HAVING COUNT(*) >= 3 ORDER BY total_spent DESC;

Маркетинговые запросы - примеры

1. Конверсия по каналам

SELECT utm_source, utm_medium, COUNT(DISTINCT session_id) AS sessions, COUNT(DISTINCT CASE WHEN event = 'purchase' THEN session_id END) AS purchases, ROUND(COUNT(DISTINCT CASE WHEN event = 'purchase' THEN session_id END) * 100.0 / COUNT(DISTINCT session_id), 2) AS conversion_rate FROM events WHERE date >= '2024-01-01' GROUP BY utm_source, utm_medium ORDER BY sessions DESC;

2. Когортный retention

SELECT DATE_TRUNC(first_purchase_date, MONTH) AS cohort, DATE_DIFF(order_date, first_purchase_date, MONTH) AS months_since_first, COUNT(DISTINCT customer_id) AS customers FROM ( SELECT customer_id, order_date, MIN(order_date) OVER (PARTITION BY customer_id) AS first_purchase_date FROM orders ) GROUP BY cohort, months_since_first ORDER BY cohort, months_since_first;

3. RFM-сегментация

SELECT customer_id, DATE_DIFF(CURRENT_DATE(), MAX(order_date), DAY) AS recency_days, COUNT(*) AS frequency, SUM(revenue) AS monetary, NTILE(5) OVER (ORDER BY DATE_DIFF(CURRENT_DATE(), MAX(order_date), DAY) DESC) AS r_score, NTILE(5) OVER (ORDER BY COUNT(*)) AS f_score, NTILE(5) OVER (ORDER BY SUM(revenue)) AS m_score FROM orders WHERE status = 'completed' GROUP BY customer_id;

Где практиковать

РесурсURLСтоимость
SQLZoosqlzoo.netБесплатно
LeetCode (SQL)leetcode.com/problemset/databaseБесплатно
Mode Analytics SQL Tutorialmode.com/sql-tutorialБесплатно
BigQuery Sandboxcloud.google.com/bigquery/docs/sandboxБесплатно (10GB)
Kaggle Datasetskaggle.com/datasetsБесплатно

🔧 Практика

  1. Установите BigQuery Sandbox (бесплатно)
  2. Загрузите GA4 sample dataset от Google
  3. Напишите 5 запросов: MAU, top pages, source/medium performance, funnel (page_view → purchase), daily revenue trend

Связанные заметки