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, обрабатывайте, потом в БД.
Что учить аналитику
- SQL — глубоко. 80% работы.
- 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).