Что вы должны уметь после изучения
Ориентируйтесь не на количество уроков, а на действия, которые сможете выполнить самостоятельно.
План изучения по этапам
Не количество запросов, а понятный результат и способ его проверить. Для подготовки достаточно разрешённого учебного набора и самостоятельного объяснения.
Определить вопрос и единицу строки
Сначала объясните, на какой вопрос должен ответить запрос и что представляет одна строка результата: отдельный объект, событие или группа. Назовите нужные поля, границы отбора и источник учебных данных.
Практика: Опишите ожидаемые столбцы и смысл одной строки до написания запроса.Результат этапа: Есть понятное описание результата и ключа. Условие отбора не скрыто в догадке автора; одна и та же сущность не считается то строкой, то группой.
Проверить отбор и расчёт по отдельности
На небольшом разрешённом наборе отделите строки, которые входят в расчёт, от исключённых. Уточните, считаете ли строки или известные значения поля. NULL не следует молча считать нулём, а отсутствие строк — готовым числовым итогом.
Практика: До запуска предскажите состав результата и объясните, как обрабатываются отсутствующие значения.Результат этапа: Можно показать, почему каждая строка включена или исключена. Для COUNT(*) и COUNT(поле) понятен разный смысл; правило для пустого набора записано явно.
Проверить соответствия при соединении
Назовите ключ соединения и ожидаемое число совпадений для одной исходной записи. Предусмотрите отсутствие совпадения и несколько совпадений. После объединения проверьте состав и количество строк, а не только итоговую сумму.
Практика: Объясните, какие исходные записи могут исчезнуть или повториться и соответствует ли это вопросу.Результат этапа: Есть основание для выбранного JOIN. Неожиданные повторы не спрятаны с помощью DISTINCT без выяснения причины; отсутствие совпадения не объявлено отсутствием исходного объекта.
Сохранить воспроизводимое объяснение
Запишите СУБД и версию, разрешённый входной набор, запрос, ожидание и фактический ответ, если запуск был. Если для задачи важен порядок, задайте его явно и определите, как сравнивать строки с одинаковым значением сортировки.
Практика: Передайте другому читателю условия сравнения и одно ограничение вывода; публикация данных в интернете не требуется.Результат этапа: Без запуска статус — «не выполнялось». Один успешный пример не доказывает правильность на любых данных, совместимость всех диалектов, скорость на большой базе или готовность к работе.
Совпала сумма. Достаточно ли этого?
Нет: одинаковый итог может скрывать другой состав строк. Для своего разрешённого учебного запроса сначала ответьте на три вопроса. Это критерии разбора, не отчёт о проверке вашей базы.
Что именно сравниваю с ожиданием?
Перечислите не только число, но и нужные идентификаторы, количество строк, состав групп и трактовку пропусков. Если важен порядок, укажите правило сортировки. Без ORDER BY полагаться на порядок выдачи нельзя; одинаковые значения сортировки могут потребовать дополнительного ключа.
Какой случай мой запрос ещё не объясняет?
Проверьте рассуждение для пустого набора, отсутствующего значения, записи без пары и нескольких совпадений по ключу. Не утверждайте, что случаи прошли: сначала запишите ожидания, затем отдельно отмечайте фактические проверки. Изменять рабочие данные ради этого нельзя.
Какое действие следует из результата?
Если ответ расходится с ожиданием, локализуйте шаг: отбор, соединение или группировка. Если совпал — укажите границы проверенного случая. Не превращайте учебную выборку в вывод о поведении клиентов, эффекте для бизнеса или выручке.
Примените критерии к трём готовым SQL-заданиям ниже: новые таблицы и второй магазин здесь не нужны. При выборе обучения проверьте формат обратной связи и результат курса, а перед самостоятельным запуском — границы безопасной практики.
Понятия сверены 16 октября 2026 по PostgreSQL 18: табличные выражения и соединения, агрегатные функции, порядок строк. Последовательность и вопросы предложены ProfiQadam, не авторами СУБД. Новые запросы и тесты PostgreSQL в этом обновлении не выполнялись. Прежние код, ответы и дата проверки упражнения ниже, условия курсов и их даты сохранены; это не испытание курса или обещание работы.
Три SQL-запроса с проверяемым ответом
Это вымышленный учебный магазин, не данные компании и не кейс с реальной выручкой. Четыре клиента, четыре заказа; у клиента №4 заказов нет. Нужен только SELECT: рабочую базу или персональные данные подключать не нужно.
Исходные данные: блок WITH перед каждым запросом
Скопируйте этот блок и добавьте сразу под ним один из SELECT ниже. CTE задаёт данные внутри запроса, не создавая постоянных таблиц. Затем повторите со следующим SELECT.
WITH customers(customer_id, city) AS (
VALUES (1, 'Almaty'), (2, 'Astana'),
(3, 'Almaty'), (4, 'Astana')
), orders(order_id, customer_id, amount_kzt, status) AS (
VALUES (1, 1, 12000, 'paid'),
(2, 1, 8000, 'cancelled'),
(3, 2, 18000, 'paid'),
(4, 3, 7000, 'paid')
)1. Отделите оплату от отмены
Найдите только оплаченные заказы. Отмена на 8 000 ₸ не должна попасть в расчёт.
SELECT order_id, amount_kzt
FROM orders
WHERE status = 'paid'
ORDER BY order_id;Сверить ответ и объяснение
order_id → amount_kzt: 1 → 12000; 3 → 18000; 4 → 7000. Контрольная сумма — 37 000 ₸.
2. Сравните города, а не отдельные заказы
Соедините клиентов и заказы по customer_id. Оставьте города с суммой оплат от 18 000 ₸.
SELECT c.city, SUM(o.amount_kzt) AS paid_kzt
FROM customers c
JOIN orders o ON o.customer_id = c.customer_id
WHERE o.status = 'paid'
GROUP BY c.city
HAVING SUM(o.amount_kzt) >= 18000
ORDER BY c.city;Сверить ответ и объяснение
city → paid_kzt: Almaty → 19000; Astana → 18000. WHERE отбирает исходные строки, HAVING — уже рассчитанные группы.
3. Не потеряйте клиента без заказов
Покажите каждого клиента, даже если оплат нет. Фильтр статуса находится в ON: перенос его в WHERE исключит клиента №4.
SELECT c.customer_id,
COUNT(o.order_id) AS paid_orders,
COALESCE(SUM(o.amount_kzt), 0) AS paid_kzt
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.customer_id
AND o.status = 'paid'
GROUP BY c.customer_id
ORDER BY c.customer_id;Сверить ответ и объяснение
customer_id → paid_orders / paid_kzt: 1 → 1 / 12000; 2 → 1 / 18000; 3 → 1 / 7000; 4 → 0 / 0. COUNT(o.order_id) не считает отсутствующий заказ; COUNT(*) дал бы для клиента №4 единицу.
Проверьте себя без готового ответа
В исходных данных замените оплату клиента №3 с 7 000 на 5 000. В первом запросе контрольная сумма станет 35 000 ₸; во втором Almaty исчезнет из результата (17 000 меньше порога); третий по-прежнему должен показывать четыре клиента.
Если сумма после JOIN выросла неожиданно, проверьте уникальность ключа и число строк до группировки: несколько совпадений справа могут размножить один заказ. Сначала объясните результат на бумаге, затем сравните его с запросом.
Синтаксис JOIN и агрегатов сверён с документацией PostgreSQL 18: JOIN и GROUP BY / HAVING 27 сентября 2026. Три исходных запроса проверены локально в SQLite; это не тест всех версий PostgreSQL, MySQL или учебных платформ.
Если понравились именно отчёты и проверка данных, сравните разбор программы аналитика Практикума с короткими SQL-курсами и бесплатной базой. Полная профессия не обязательна для изучения одного SQL; упражнение не гарантирует работу или доход.
Инструменты и понятия
Что чаще всего мешает прогрессу
- 01Учить синтаксис без задач
- 02Не проверять дубликаты и пропуски
- 03Показывать только код без выводов
Сравните три маршрута и бесплатный старт
Выберите короткий SQL-курс, полную профессию аналитика или самостоятельную специализацию. Бесплатный модуль Microsoft помогает проверить интерес до оплаты.
Сравнить курсы SQL →
