Аналитик тратит на написание SQL-запросов от 30% до 50% рабочего времени. Это часы рутинной работы: вспомнить синтаксис оконных функций, правильно написать CTE, не перепутать LEFT JOIN с INNER JOIN в сложном запросе.
ChatGPT меняет эту ситуацию. По данным исследования GitHub за 2024 год, разработчики с AI-ассистентами выполняют задачи на 55% быстрее. Для аналитиков эффект может быть ещё выше — потому что SQL-запросы более шаблонны, чем произвольный код.
Но есть проблема. ChatGPT не знает вашу базу данных. Он не видит структуру таблиц, не понимает бизнес-логику и иногда генерирует красивые, но неработающие запросы. Использовать его без понимания — опасно. Использовать с умом — мощнейший инструмент.
Эта статья — практическое руководство. Как составлять промпты, чтобы получать рабочие запросы с первого раза. Какие задачи ChatGPT решает отлично, а в каких только мешает. Как проверять результаты и не попасть в ловушку галлюцинаций AI.
1. Что ChatGPT умеет и не умеет в SQL
Начнём с честной оценки возможностей. ChatGPT — это языковая модель, обученная на огромном количестве кода, документации и туториалов. Он отлично понимает синтаксис SQL и знает паттерны решения типовых задач.
Вот что он делает хорошо:
| Задача | Результат | Примечание |
|---|---|---|
| Написать базовый SELECT с JOIN | ✓ Отлично | Справляется с первого раза |
| Объяснить чужой сложный запрос | ✓ Отлично | Разбивает на части, объясняет каждую |
| Оконные функции (ROW_NUMBER, LAG, LEAD) | ✓ Хорошо | Иногда нужна корректировка PARTITION BY |
| CTE и подзапросы | ✓ Хорошо | Структурирует логично |
| Оптимизация запросов | △ Средне | Даёт общие рекомендации, но не видит план выполнения |
| Специфика вашей базы данных | ✗ Плохо | Не знает структуру ваших таблиц |
| Бизнес-логика компании | ✗ Плохо | Не понимает контекст без объяснения |
Главное ограничение — ChatGPT не видит вашу базу данных. Он не знает, что таблица orders у вас называется order_fact, что статус заказа хранится в отдельной таблице, а дата создания — в формате Unix timestamp. Всё это нужно объяснять в промпте.
«Я потратил час на отладку запроса от ChatGPT. Оказалось, он использовал функцию DATEADD, которой нет в PostgreSQL. Теперь всегда указываю диалект SQL в промпте.»
— Аналитик данных, финтех
2. Как составить промпт, чтобы получить рабочий запрос
Качество промпта определяет 80% качества ответа. Размытый запрос — размытый результат. Конкретный промпт с контекстом — почти готовый код.
Вот формула эффективного промпта для SQL-задачи:
Контекст + Структура данных + Задача + Ограничения
Разберём каждый элемент.
Контекст — кто вы и какой диалект SQL используете:
| Плохо ✗ | Хорошо ✓ |
|---|---|
| Напиши SQL-запрос для... | Я аналитик, работаю с PostgreSQL 14. Напиши запрос для... |
Указание диалекта критично. DATEADD работает в SQL Server, но не в PostgreSQL. В MySQL нет QUALIFY. В ClickHouse свой синтаксис массивов.
Структура данных — опишите таблицы и поля:
| Плохо ✗ | Хорошо ✓ |
|---|---|
| Есть таблица с заказами и клиентами | Таблица orders: order_id (INT), user_id (INT), amount (DECIMAL), created_at (TIMESTAMP), status (VARCHAR). Таблица users: user_id (INT), email (VARCHAR), country (VARCHAR) |
Чем точнее опишете структуру, тем меньше придётся исправлять. Если таблиц много, опишите только те, которые нужны для задачи.
Задача — что конкретно нужно получить:
| Плохо ✗ | Хорошо ✓ |
|---|---|
| Покажи продажи по месяцам | Посчитай общую сумму заказов (поле amount) за каждый месяц 2024 года. Группируй по месяцам, сортируй от старых к новым |
Ограничения — бизнес-логика, которую нужно учесть:
| Плохо ✗ | Хорошо ✓ |
|---|---|
| (не указаны) | Учитывай только заказы со статусом 'completed'. Исключи тестовых пользователей (email содержит @test.com) |
Вот пример полного промпта:
Я аналитик, работаю с PostgreSQL 14.
Структура таблиц:
- orders: order_id, user_id, amount, created_at, status
- users: user_id, email, country, registered_at
Задача: посчитать retention первого месяца для когорт
пользователей Q4 2024.
Когорта = месяц регистрации.
Retention = доля пользователей, сделавших хотя бы один
заказ в течение 30 дней после регистрации.
Ограничения:
- Только пользователи из России (country = 'RU')
- Исключить заказы со статусом 'cancelled'
- Исключить тестовые email (@test.com)С таким промптом ChatGPT даст рабочий запрос в 9 случаях из 10. Если что-то не так — легко уточнить, потому что контекст уже задан.
3. Шесть типовых задач, которые ChatGPT решает за минуту
Есть категории SQL-задач, где ChatGPT особенно эффективен. Это паттерны, которые встречаются постоянно и имеют стандартные решения.
Задача 1: Когортный анализ
Когорты — головная боль для многих аналитиков. Нужно правильно определить когорту, посчитать метрику для каждого периода, развернуть в матрицу.
Промпт:
PostgreSQL. Таблицы: users (user_id, registered_at),
orders (order_id, user_id, created_at, amount).
Построй когортный анализ retention по месяцам.
Когорта = месяц регистрации.
Показать retention за 0, 1, 2, 3 месяца после регистрации.
Период: пользователи, зарегистрированные в Q3 2024.ChatGPT сгенерирует CTE с определением когорт, джойн с заказами, расчёт retention и разворот в матрицу. Останется только проверить и запустить.
Задача 2: Оконные функции для ранжирования
ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD — синтаксис легко забыть, особенно комбинацию PARTITION BY и ORDER BY.
Промпт:
PostgreSQL. Таблица orders (order_id, user_id, amount, created_at).
Для каждого пользователя найти:
1. Сумму первого заказа
2. Сумму последнего заказа
3. Разницу между последним и первым заказом
4. Общее количество заказовВместо того чтобы вспоминать, как писать FIRST_VALUE и LAST_VALUE, получаете готовый запрос за секунды.
Задача 3: Расчёт метрик с накоплением
Running total, скользящие средние, накопительные суммы — частые задачи в отчётах.
Промпт:
PostgreSQL. Таблица daily_revenue (date, revenue).
Добавь к каждой строке:
1. Накопительную сумму revenue с начала месяца
2. Скользящее среднее за 7 дней
3. Сравнение с тем же днём прошлой недели (% изменения)Задача 4: Сложные условия фильтрации
Когда условий много и они зависят друг от друга, легко запутаться в скобках.
Промпт:
PostgreSQL. Таблица users (user_id, plan, status, last_login, signup_date).
Найти пользователей, которые:
- НА премиум плане (plan = 'premium')
- И (не заходили больше 30 дней ИЛИ статус 'churned')
- НО зарегистрировались больше 3 месяцев назад
- И это НЕ корпоративные аккаунты (plan != 'enterprise')ChatGPT правильно расставит скобки и операторы AND/OR.
Задача 5: Pivot таблицы
Развернуть строки в столбцы — задача с неочевидным синтаксисом в большинстве диалектов SQL.
Промпт:
PostgreSQL. Таблица sales (product_id, month, amount).
Разверни данные так, чтобы:
- Строки = product_id
- Столбцы = месяцы (Jan, Feb, Mar, Apr)
- Значения = сумма amountЗадача 6: Работа с датами
Каждый диалект SQL имеет свои функции для дат. ChatGPT знает их все.
Промпт:
PostgreSQL. Таблица events (event_id, event_time).
Для каждого события добавь:
- День недели (название)
- Номер недели в году
- Начало и конец текущей недели
- Разницу в днях до конца месяца4. Оптимизация запросов: что ChatGPT может и не может
Оптимизация SQL — сложная тема. ChatGPT может помочь, но с ограничениями.
Вот что он делает хорошо:
Предлагает добавить индексы на колонки в WHERE и JOIN
Замечает очевидные антипаттерны (SELECT * в подзапросах, лишние DISTINCT)
Предлагает переписать коррелированные подзапросы в JOIN
Советует использовать CTE вместо вложенных подзапросов для читаемости
Чего он не может:
Увидеть реальный план выполнения запроса (EXPLAIN ANALYZE)
Знать статистику распределения данных в таблицах
Учесть специфику вашего сервера и его настроек
Понять, какие индексы уже существуют
Правильный подход: получите запрос от ChatGPT, запустите EXPLAIN ANALYZE, скопируйте результат обратно в ChatGPT и попросите проанализировать.
Промпт для оптимизации:
Вот мой запрос PostgreSQL:
[вставить запрос]
Вот результат EXPLAIN ANALYZE:
[вставить план выполнения]
Запрос работает 45 секунд, нужно ускорить до 5.
Что можно оптимизировать?Теперь ChatGPT видит, где узкое место: Seq Scan вместо Index Scan, плохая оценка строк, дорогие Hash Join. И может дать конкретные рекомендации.
5. Как ChatGPT помогает с анализом результатов
SQL — это только половина работы аналитика. Вторая половина — понять, что означают полученные данные, найти инсайты, сформулировать выводы.
ChatGPT отлично справляется с интерпретацией данных, если правильно задать контекст.
Пример 1: Анализ воронки
Вы получили данные по конверсии:
| Этап | Пользователи | Конверсия |
|---|---|---|
| Посетили сайт | 100,000 | 100% |
| Зарегистрировались | 15,000 | 15% |
| Начали trial | 8,000 | 53% |
| Оплатили | 1,200 | 15% |
Промпт:
Я аналитик SaaS-продукта. Вот данные по воронке за Q4:
[вставить таблицу]
Средние показатели по рынку:
- Регистрация: 10-20%
- Trial activation: 40-60%
- Trial to paid: 20-30%
Проанализируй воронку. Где узкие места?
Какие гипотезы можно выдвинуть?ChatGPT заметит, что конверсия из trial в оплату (15%) ниже рынка (20-30%) и предложит гипотезы: проблемы с онбордингом, непонятная ценность, слишком короткий trial.
Пример 2: Сравнение когорт
Вы посчитали retention для разных когорт:
| Когорта | M0 | M1 | M2 | M3 |
|---|---|---|---|---|
| Июль 2024 | 100% | 45% | 32% | 28% |
| Август 2024 | 100% | 52% | 41% | 35% |
| Сентябрь 2024 | 100% | 58% | 48% | 42% |
Промпт:
Данные retention по когортам:
[вставить таблицу]
В августе запустили новый онбординг.
В сентябре добавили email-напоминания.
Какие выводы можно сделать? Какой из запусков
дал больший эффект? Какие дополнительные данные
помогли бы подтвердить гипотезы?ChatGPT проанализирует динамику, заметит улучшение и предложит дополнительные срезы для проверки (по каналам привлечения, по устройствам, A/B тесты).
6. Ошибки ChatGPT и как их ловить
ChatGPT уверенно генерирует неправильный код. Он не знает, что ошибается, и не предупредит вас. Это называется "галлюцинации" — модель выдумывает то, чего не существует.
Типичные ошибки:
| Тип ошибки | Пример | Как поймать |
|---|---|---|
| Несуществующие функции | DATEADD в PostgreSQL (есть только в SQL Server) | Запустить запрос — получить ошибку синтаксиса |
| Неправильные имена полей | Использует user_id вместо customer_id | Сверить со схемой таблицы перед запуском |
| Логические ошибки | LEFT JOIN вместо INNER JOIN меняет смысл | Проверить результат на тестовых данных |
| Пропущенные условия | Забыл исключить тестовых пользователей | Перечитать промпт и сверить с запросом |
| Неправильная агрегация | COUNT(*) вместо COUNT(DISTINCT user_id) | Проверить логику подсчёта вручную |
Золотое правило: никогда не запускайте запрос от ChatGPT на продакшн-базе без проверки.
Чек-лист проверки запроса:
Прочитайте запрос целиком — понимаете ли вы, что он делает?
Сверьте имена таблиц и полей со схемой базы
Проверьте типы JOIN — правильно ли выбраны?
Убедитесь, что все условия из промпта попали в WHERE
Запустите на небольшой выборке (добавьте LIMIT 100)
Проверьте результат на здравый смысл
Если результат выглядит странно — не доверяйте ChatGPT. Разберитесь сами или попросите его объяснить каждую часть запроса.
7. Продвинутые техники: создание промпт-шаблонов
Если вы регулярно решаете похожие задачи, создайте библиотеку промпт-шаблонов. Это экономит время и повышает качество результатов.
Шаблон для когортного анализа:
Диалект: [PostgreSQL/MySQL/ClickHouse]
Таблица пользователей: [имя], поля: [перечислить]
Таблица событий: [имя], поля: [перечислить]
Когорта определяется по: [месяц регистрации / источник / план]
Событие для retention: [заказ / вход / действие]
Период анализа: [Q3 2024]
Глубина анализа: [3 месяца / 6 месяцев / 12 месяцев]
Дополнительные фильтры:
- [исключить тестовых]
- [только мобильные]
- [только Россия]Шаблон для воронки:
Диалект: [PostgreSQL/MySQL/ClickHouse]
Таблица событий: [имя], поля: [перечислить]
Этапы воронки (в порядке):
1. [событие] — [условие]
2. [событие] — [условие]
3. [событие] — [условие]
Группировать по: [каналу / устройству / региону]
Период: [последние 30 дней]
Временное окно между этапами: [без ограничений / 7 дней]Шаблон для RFM-анализа:
Диалект: [PostgreSQL]
Таблица заказов: [имя], поля: [перечислить]
Параметры RFM:
- Recency: дней с последнего заказа, границы сегментов [30, 90, 180]
- Frequency: количество заказов, границы [1, 3, 10]
- Monetary: общая сумма, границы [1000, 5000, 20000]
Период анализа: [последний год]
Исключить: [отменённые заказы, тестовые пользователи]8. Работа с ошибками и итерации
Редко получается идеальный запрос с первого раза. Умение итерировать с ChatGPT — важный навык.
Сценарий 1: Синтаксическая ошибка
Запрос не выполняется. Скопируйте ошибку в ChatGPT:
Запрос выдаёт ошибку:
ERROR: column "user_id" must appear in the GROUP BY clause
or be used in an aggregate function
Исправь запрос.ChatGPT поймёт проблему и добавит нужное поле в GROUP BY или обернёт в агрегатную функцию.
Сценарий 2: Неправильные результаты
Запрос работает, но данные странные:
Запрос вернул 0 строк, хотя данные точно есть.
Вот запрос: [вставить]
Вот структура таблицы: [вставить]
Что не так?ChatGPT проанализирует условия WHERE, JOIN и найдёт, почему фильтрация отсекает все строки.
Сценарий 3: Запрос слишком медленный
Запрос работает 5 минут на таблице в 10 млн строк.
Вот запрос: [вставить]
Вот EXPLAIN ANALYZE: [вставить]
Как ускорить? Какие индексы создать?Сценарий 4: Нужна модификация
Запрос работает. Теперь добавь:
1. Фильтр по дате (только последние 30 дней)
2. Группировку по каналу привлечения
3. Сортировку по убыванию суммыChatGPT сохранит контекст предыдущего запроса и добавит изменения.
9. ChatGPT для документации и обучения
Помимо написания запросов, ChatGPT полезен для понимания чужого кода и обучения.
Объяснение сложного запроса
Получили запрос от коллеги на 100 строк. Нужно понять, что он делает:
Объясни этот SQL-запрос шаг за шагом.
Что делает каждый CTE?
Какой итоговый результат?
[вставить запрос]ChatGPT разобьёт запрос на части и объяснит каждую человеческим языком.
Изучение новых концепций
Объясни на простом примере, как работает
QUALIFY в SQL. Когда его использовать вместо
подзапроса с WHERE?Покажи 5 примеров использования оконной функции
NTILE(). Для каких бизнес-задач она полезна?Сравнение подходов
Какие есть способы посчитать медиану в PostgreSQL?
Сравни по производительности и синтаксису.
Какой способ лучше для таблицы в 100 млн строк?10. Ограничения и альтернативы
ChatGPT — не единственный инструмент. И не всегда лучший.
Когда ChatGPT не подходит:
Конфиденциальные данные — нельзя отправлять структуру базы или реальные данные в публичный ChatGPT
Специфичные базы данных — редкие диалекты SQL он знает хуже
Критичная оптимизация — нужен реальный DBA с доступом к серверу
Альтернативы:
| Инструмент | Особенности | Когда использовать |
|---|---|---|
| GitHub Copilot | Интеграция с IDE, видит контекст файла | Если пишете SQL в VS Code или DataGrip |
| Claude (Anthropic) | Лучше работает с длинным контекстом | Для очень сложных запросов с большим контекстом |
| Локальные LLM | Данные не уходят наружу | Для работы с конфиденциальными данными |
| BI-инструменты с AI | Знают вашу схему данных | Metabase, Looker с AI-функциями |
Для конфиденциальных проектов рассмотрите ChatGPT Enterprise или API с отключённым обучением на ваших данных.
11. Практический воркфлоу: как встроить ChatGPT в работу
Вот как может выглядеть типичный рабочий процесс аналитика с ChatGPT:
Шаг 1: Формулировка задачи
Получаете запрос от продакт-менеджера: «Нужны данные по retention для презентации инвесторам».
Шаг 2: Составление промпта
Открываете шаблон для когортного анализа, заполняете параметры: структура таблиц, период, фильтры, нужные срезы.
Шаг 3: Генерация запроса
Отправляете промпт в ChatGPT, получаете SQL-код.
Шаг 4: Проверка
Читаете запрос, сверяете со схемой базы, запускаете с LIMIT 100.
Шаг 5: Итерации
Если что-то не так — отправляете ошибку или результат обратно в ChatGPT, уточняете.
Шаг 6: Анализ результатов
Получили данные. Отправляете таблицу в ChatGPT с просьбой найти паттерны и сформулировать выводы.
Шаг 7: Документация
Просите ChatGPT добавить комментарии к запросу для коллег.
Весь процесс занимает 15-20 минут вместо часа-двух ручной работы.
12. Что запомнить
ChatGPT — мощный инструмент для аналитика, но не замена знаниям SQL. Он усиливает ваши навыки, а не заменяет их.
Главные правила:
Всегда указывайте диалект SQL в промпте
Описывайте структуру таблиц — ChatGPT не знает вашу базу
Формулируйте задачу конкретно — размытый промпт = размытый результат
Никогда не запускайте запрос без проверки
Используйте ChatGPT для итераций — ошибки и уточнения это нормально
Создавайте шаблоны промптов для типовых задач
Где ChatGPT экономит больше всего времени:
Оконные функции и сложные агрегации
Когортный анализ и retention
Pivot-таблицы и работа с датами
Объяснение и документирование чужого кода
Интерпретация результатов и поиск инсайтов
Аналитик, который умеет эффективно использовать AI-инструменты, делает за день то, на что раньше уходила неделя. Это не магия — это новый стандарт эффективности, к которому стоит адаптироваться уже сейчас.
А лучшие вакансии для аналитиков ищите на hirehi.ru