SQL и Python: один запрос - два разных способа думать
Сейчас у аналитика для работы с данными есть два популярных "инструмента" - это SQL и Python.
Часто слышу, что SQL считают "жестким", а Python - "гибким" инструментом в аналитике.
На самом деле разница не в гибкости между этими языками, а в "модели выполнения"
Ниже сравним один и тот же пример реализованный SQL и Python. И проследим, что выполняется на каждом шаге.
А пока подписывайся на мой канала Аналитика FM.
Его я веду с нуля подписчиков. В этом канале я публикую информацию об инструментах аналитика (SQL, Python)
О мышлении аналитика, о метриках, об ошибках.
Публикую чек-листы по стандартным видам работы аналитика. Присоединяйся!
Рассмотрим задачу.
Есть таблица заказов. Нужно:
- Взять только оплаченные заказы
- Посчитать сумму заказов по пользователям
- Оставить пользователей, у которых сумма больше 10 000
- Отсортировать по убыванию суммы
Как это выглядит в SQL
Что происходит на самом деле?
Хотя запрос написан сверху вниз, выполняется он иначе:
- FROM — база берёт таблицу orders
- WHERE — отфильтровывает только status = 'paid'
- GROUP BY — группирует строки по user_id
- SUM(amount) — считает сумму внутри каждой группы
- HAVING — отбрасывает группы с суммой ≤ 10 000
- SELECT — формирует финальные колонки
- ORDER BY — сортирует результат
SQL не идёт шаг за шагом как сценарий. Для него каждый запрос - это единый слепок результата
Ты не "живешь" внутри процесса, ты его декларируешь.
Теперь тот же самый запрос в Python (pandas)
Чтобы не увеличивать объем строк с подключением к БД, сделаем так, что наши данные мы читаем из CSV файла
- Ты загружаешь данные. Ты их уже видишь. Они лежат в память, у них есть текущее состояние.
2. Фильтрация
Здесь отфильтровали данные, можно посмотреть, что получилось, можно вернуться назад.
Это состояние сохранилось.
3. Группировка и агрегация
Ты видишь промежуточный результат:
- пользователей
- их суммы
- можешь проверить аномалии
4. Фильтр по агрегату
5. Сортировка
Ключевая разница
SQL
- нет "текущего состояния"- каждый запрос - это новый расчет- описываем, что хотим получить- оптимизатор решает как
Python
- данные живут в памяти- каждый шаг меняет состояние- на каждом шаге можно остановиться, посмотреть, вернуться, ветвить логику
На практике аналитик:
- думает как в Python
- реализует как в SQL- и постоянно переключается между этими моделями
Получается, что SQL и Python - это два разных способа мышления.SQL говорит нам - вот результатPython - вот процесс.Python - это процедурный подход.Аналитик говорит КАК делать:- возьми данные- отфильтруй- посчитай- отсортируй- покажи результатЗдесь происходить управление процессом: мы ведем данные по шагам
SQL - декларативный подход.
Аналитик не говорит КАК делать, он говорит, что хочет получить.
В разбираемом примере мы говори: Хочу видеть сумму заказов по пользователям, только оплаченные, только больше 10 000
Для SQL есть входные данные, правила отбора, финальный результат.
SQL не живет во времени, он живет в описании результата
Ну а в моем канале Аналитика FM не только об инструментах аналитика, но и об аналитическом мышлении, метриках, логики. Присоединяйся!