SQL vs Python: когда что выбрать

Краткий ответ

  • SQL — для извлечения и агрегации данных из БД. Быстрее и проще.
  • Python — для сложной обработки, ML, визуализации и работы с не-табличными данными.

Когда лучше SQL

1. Простые агрегаты по огромным данным

-- Считать GMV по миллионам строк — SQL быстрее в 10-100x
SELECT category, SUM(amount) FROM orders GROUP BY category;

В pandas: загрузить 100M строк в память → OOM.

В SQL: выполняется в БД, возвращает 5-10 строк агрегатов.

2. JOIN-ы между таблицами

-- В SQL естественно
SELECT u.name, o.amount
FROM users u
JOIN orders o USING (user_id);

В pandas через merge — работает, но требует обе таблицы в памяти.

3. Когортные и retention-анализы

WITH cohort AS (...),
activity AS (...)
SELECT ...

Делается одним запросом в БД.

4. Repeating reports

Если запрос будет выполняться ежедневно — лучше в SQL → dbt модель → дашборд.

5. Filtering / window functions

ROW_NUMBER() OVER (PARTITION BY user_id) — более ясен в SQL, чем в pandas.

6. Real-time queries

Дашборд должен обновиться за 1-2 секунды — SQL.

Когда лучше Python

1. Сложная обработка строк

# Парсинг URL, JSON, regex — Python гибче
df['domain'] = df['url'].str.extract(r'https?://([^/]+)')
df['utm'] = df['url'].apply(parse_utm_params)

В SQL можно, но больно.

2. Машинное обучение

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X, y)

В SQL — почти невозможно (есть SQLML, но редко).

3. Визуализация

import matplotlib.pyplot as plt
import seaborn as sns

sns.heatmap(retention_table)
plt.show()

SQL не визуализирует — только данные.

4. Работа с API / web scraping

import requests
data = requests.get('https://api.example.com').json()

SQL не делает HTTP-запросов.

5. Сложные кастомные функции

Если нужно применить уникальную бизнес-логику к каждой строке — Python проще.

6. Работа с не-табличными данными

JSON, XML, картинки, текст — Python.

7. Юпитер-ноутбуки для исследования

Pandas + matplotlib в Jupyter — стандарт research workflow.

Гибридный подход (рекомендуется)

В реальной работе аналитик использует оба:

# 1. Тяжёлая агрегация в SQL
df = pd.read_sql("""
    SELECT date, category, SUM(amount) AS revenue
    FROM orders WHERE created_at >= '2026-01-01'
    GROUP BY 1, 2
""", conn)

# 2. Дальнейшая обработка / viz в Python
df_pivot = df.pivot(index='date', columns='category', values='revenue')
df_pivot.plot.area(stacked=True)

Принцип: SQL делает heavy lifting (агрегация), Python — fine work (анализ, viz).

Больше таких примеров с разборами — в Telegram-тренажёре. Короткие сессии, прогресс по темам, объяснения после каждого ответа.

Сравнение по задачам

Задача SQL Python
Сложный JOIN ⚠️ ОК
GROUP BY на 100M строк
Парсинг текста ⚠️
ML
Визуализация
Дашборд
Временные ряды (сложно) ⚠️
Экспорт в CSV / Excel ⚠️
Работа с API
Когорты
One-off исследование ⚠️

Производительность

  • SQL на больших данных в БД — быстрее в 10–100x благодаря индексам и оптимизатору.
  • Python на маленьких данных в RAM — быстрее в 2–5x, потому что нет network overhead.

Граница: ~1M строк. Меньше — Python OK, больше — SQL.

Когда начинать с SQL

  • Данные в БД.
  • Нужно одно число / маленький результат.
  • Этот запрос будет повторяться.

Когда начинать с Python

  • Данные в файле / API.
  • Нужен сложный анализ, визуализация.
  • One-time исследование.

Если готовишься к собесу — бот @kariernik_bot закрывает 80% технических вопросов. SQL, Python, A/B, продуктовые метрики — всё в одном месте.

Антипаттерны

1. Загружать всю таблицу в pandas

# ❌
df = pd.read_sql('SELECT * FROM events', conn)  # OOM при 50M строк
df.groupby('date').count()

Правильно — агрегировать в SQL:

df = pd.read_sql('SELECT date, COUNT(*) FROM events GROUP BY date', conn)

2. Делать сложный SQL вместо Python

Если SQL стал из 200 строк CASE WHEN — может, в Python проще?

3. Не использовать SQL совсем

«Я знаю только Python» — ограничение для аналитика. SQL выигрывает 80% задач с большими данными.

4. Работать с XLSX в SQL

Excel-файлы → грузите в Python, обрабатывайте, потом в БД.

Что учить аналитику

  1. SQL — глубоко. 80% работы.
  2. Python + pandas — на уровне «свободно владеть». 20% работы, но critical.

Без обоих — потолок junior. С обоими — middle / senior.

Читайте также

FAQ

Что важнее — SQL или Python?

SQL обязателен. Python желателен. Но без Python вы junior; с Python — middle+.

С чего начать?

SQL. Через 3-4 недели база — Python. Параллельно — забудете оба.

Можно ли всё делать в Python?

Технически — да, но неэффективно. SQL делает агрегацию правильно.

dbt — это Python или SQL?

dbt пишется на SQL + Jinja templating. Python минимально (для config).