← 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

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