Операторы SQL: шпаргалка для аналитика с примерами применения
Большая шпаргалка по SQL-операторам: фильтрация, сравнение, агрегаты, JOIN, окна, строки, даты и JSONB с маршрутами для практики.
Содержание статьи
Справочник синтаксиса редко помогает в момент задачи: нужно понять, фильтровать строки или группы, добавить атрибут или проверить наличие, получить ровно три строки или сохранить ничьи. Шпаргалка полезна, когда она организована по рабочим решениям, а не по алфавиту. Разберём вопрос на одном запросе: Как быстро выбрать оператор SQL под задачу и не перепутать похожие конструкции?
Когда нужен этот приём
Как быстро выбрать оператор SQL под задачу и не перепутать похожие конструкции?
Если вопрос звучит «сколько пользователей сделали X в течение семи дней», нужны базовая когорта, EXISTS или дедупликация и явное окно. Если «топ-3 в каждой категории», нужен агрегатный слой и RANK или ROW_NUMBER. Сначала классифицируй задачу, затем выбирай синтаксис.
Используй шпаргалку как карту выбора. Для точного ответа важнее определить зерно и окно, чем вспомнить редкий оператор. После этого проверь запрос на дубли, NULL, пустой период и стабильность сортировки.
Логика оператора
SQL для аналитика можно собрать в паттерны: отобрать строки, привести тип, сгруппировать, соединить, проверить наличие, сравнить с соседней строкой, объединить потоки и извлечь свойства. Один и тот же оператор может быть правильным или опасным в зависимости от зерна результата.
Начни с четырёх вопросов: что является строкой результата, откуда берём факты, где происходит фильтр и допускаются ли повторы. После этого выбери семейство операторов и добавь тест на границы. В тренажёре полезно решать один кейс несколькими способами.
- Зафиксируй одну строку результата.
- Отдели условия по исходным строкам от условий по рассчитанным значениям.
- Назови период, ключи связи и правило для повторов.
Рабочая версия
Названия таблиц здесь условные. При переносе сохрани зерно и бизнес-условия, а не буквальный синтаксис примера.
WITH user_day AS (
SELECT DISTINCT user_id, occurred_at::date AS day
FROM events
WHERE occurred_at >= TIMESTAMP '2026-07-01 00:00:00'
)
SELECT day, COUNT(*) AS active_users
FROM user_day GROUP BY day ORDER BY day;Как сверить ответ
Собери пять-десять строк, где ответ можно получить вручную. Добавь NULL, дубль, объект без связанной записи и значение на границе периода. Затем сравни число строк и уникальных ключей до и после спорного шага.
Выполненный без ошибки запрос ещё не является правильным. Другой аналитик должен суметь восстановить из него источник, фильтр, grain и ожидаемое поведение на крайних случаях.
| Вопрос | Стартовый инструмент | Проверка |
|---|---|---|
| какие строки оставить? | WHERE | период и NULL |
| какие группы оставить? | HAVING | агрегатный уровень |
| есть ли связанная строка? | EXISTS | one-to-many |
| топ внутри группы? | RANK / ROW_NUMBER | ничьи |
| сравнить с прошлым? | LAG / LEAD | сортировка |
Когда выбрать другой способ
Самые дорогие ошибки не в запятых: неверный знаменатель, размножение после JOIN, включённый незрелый день, NULL в NOT IN и рейтинг до GROUP BY. Проверяй результат на маленьком наборе и смотри на cardinality каждого слоя.
Используй шпаргалку как карту выбора. Для точного ответа важнее определить зерно и окно, чем вспомнить редкий оператор. После этого проверь запрос на дубли, NULL, пустой период и стабильность сортировки.
Каждый блок отвечает за отдельный риск: период, повторы, зерно или представление.
Небольшой эксперимент
Выбери одну рабочую метрику и собери её из базовых блоков: WHERE, GROUP BY, JOIN, CASE и окно. Затем запиши, какие блоки можно заменить и что при этом изменится. Такой разбор превращает шпаргалку в навык, а не в коллекцию заклинаний.
- Сначала запиши ожидаемый результат словами.
- Проверь запрос на маленькой контрольной выборке.
- Объясни, что запрос считает и чего не доказывает.
Следующий шаг
Используй шпаргалку как карту выбора. Для точного ответа важнее определить зерно и окно, чем вспомнить редкий оператор. После этого проверь запрос на дубли, NULL, пустой период и стабильность сортировки.
Материалы по теме

LATERAL JOIN в PostgreSQL: последняя запись и top-N на сущность
Как работает LATERAL JOIN: последний заказ пользователя, несколько последних событий на клиента, разница между LEFT и CROSS, нужные индексы и сравнение с оконными функциями.

JSONB в PostgreSQL: операторы, типы и запросы к свойствам событий
Как читать JSONB в аналитике: операторы ->, ->>, @> и ?, приведение типов, три вида пропущенного значения, разворачивание массивов и индексы под реальные запросы.

LIKE и ILIKE в SQL: поиск по строкам, регистр и индексы
Как искать по тексту в SQL: шаблоны LIKE и ILIKE, экранирование пользовательского ввода, работа с регистром и момент, когда запрос перестаёт использовать индекс.