Задачи по SQL онлайн
Задачи по SQL помогают перейти от знания синтаксиса к умению самостоятельно собирать запрос. В SQL Arena решение выполняется в браузере и проверяется автоматически, причём не только на видимых таблицах, но и на скрытых данных.
Обновлено · Команда SQL Arena
Что потренируете
- Фильтрация и вычисления
- JOIN между таблицами
- Агрегаты и группировка
- Оконные функции
- Подзапросы и многошаговая логика
Пример задачи в тренажёре
Так выглядит задача в SQL Arena: условие, редактор, результат и схема базы.
Есть задачи и попытки пользователей. Для каждой задачи посчитайте общее число попыток как attempts и число успешных попыток как passed. Оставьте только задачи минимум с двумя попытками. Выведите title, attempts, passed и отсортируйте сначала по числу попыток по убыванию, затем по названию.
SELECT c.title, COUNT(a.id) AS attempts, COUNT(*) FILTER (WHERE a.passed) AS passed FROM challenges c JOIN attempts a ON a.challenge_id = c.id GROUP BY c.id, c.title HAVING COUNT(a.id) >= 2 ORDER BY attempts DESC, c.title;
| # | title | attempts | passed |
|---|---|---|---|
| 1 | Active Accounts | 3 | 2 |
| 2 | Daily Revenue | 3 | 2 |
| 3 | Customer Rank | 2 | 1 |
Есть задачи и попытки пользователей. Для каждой задачи посчитайте общее число попыток как attempts и число успешных попыток как passed. Оставьте только задачи минимум с двумя попытками. Выведите title, attempts, passed и отсортируйте сначала по числу попыток по убыванию, затем по названию.
SELECT c.title, COUNT(a.id) AS attempts, COUNT(*) FILTER (WHERE a.passed) AS passed FROM challenges c JOIN attempts a ON a.challenge_id = c.id GROUP BY c.id, c.title HAVING COUNT(a.id) >= 2 ORDER BY attempts DESC, c.title;
Разбор решения задачи
Каждая строка attempts относится к одной задаче через challenge_id. Поэтому сначала соединяем challenges и attempts по a.challenge_id = c.id. После JOIN задача встречается столько раз, сколько по ней было попыток. Это как раз то представление данных, на котором удобно считать статистику.
COUNT(a.id) считает все попытки. Для успешных решений используется PostgreSQL-конструкция COUNT(*) FILTER (WHERE a.passed): в этот агрегат попадают только строки, где passed равен TRUE. Затем GROUP BY собирает строки обратно по задачам. HAVING COUNT(a.id) >= 2 исключает задачи, по которым была всего одна попытка.
ORDER BY attempts DESC, c.title делает результат однозначным. Сначала идут задачи с большим числом попыток. Если значение одинаковое, срабатывает второй критерий — название. В учебных задачах ORDER BY важен не только для красоты: без явной сортировки база не обязана возвращать строки в том порядке, в котором вы их увидели при прошлом запуске.
SELECT c.title, COUNT(a.id) AS attempts, COUNT(*) FILTER (WHERE a.passed) AS passed FROM challenges c JOIN attempts a ON a.challenge_id = c.id GROUP BY c.id, c.title HAVING COUNT(a.id) >= 2 ORDER BY attempts DESC, c.title;
| title | attempts | passed |
|---|---|---|
| Active Accounts | 3 | 2 |
| Daily Revenue | 3 | 2 |
| Customer Rank | 2 | 1 |
Типичные ошибки в задачах по SQL
Подгонять запрос под видимые строки
На маленьком наборе данных неверная логика иногда случайно даёт правильный результат. Например, можно не учесть NULL, дубликаты или дополнительные строки. Проверка на скрытых данных показывает, действительно ли решение обобщается.
Сразу смотреть готовое решение
SQL задачи с решениями полезны как материал для разбора, но копирование ответа почти не тренирует выбор конструкции. Лучше сначала написать собственный вариант, посмотреть ошибку и использовать подсказку только там, где застряли.
Оценивать сложность по длине запроса
Hard-задача не обязательно содержит много строк SQL. Сложность может быть в том, чтобы правильно понять данные, выбрать уровень агрегации или учесть пограничные случаи. И наоборот, длинный запрос иногда состоит из нескольких простых шагов.
Задачи по теме в тренажёре
Все задачи тренажёраЗадачи удобно проходить по сложности. Easy закрепляют базовые операции и помогают привыкнуть писать запрос без подсказанного шаблона. Medium чаще требуют связать несколько действий и внимательнее следить за промежуточным результатом. Hard и Expert проверяют уже не столько память на синтаксис, сколько способность разложить условие на этапы. В SQL Arena 1 192 задачи с автопроверкой, и у каждой свои таблицы. Решения сверяются с эталоном на скрытых данных. Это отличается от страницы с готовыми SQL задачами и ответами: одинаковый результат на одном примере ещё не означает правильную логику. В подборке есть «Распределение событий по часу суток» и «Число записей по статус-кодам» для ClickHouse, «Средняя задержка по сервисам», «Минимальная и максимальная задержка по сервисам», «Только оплаченные истории», «География каждой платформы», «Хроника каждого пользователя» и «Финал каждой сессии». Если задача не получается, AI-ментор может дать подсказку и объяснить ошибку; бесплатно доступно 10 таких обращений всего. Для более жёсткой проверки есть режим «Собеседование» с серверным таймером, без подсказок и с отчётом после сессии; бесплатно его можно запускать один раз в день.
- EasyбесплатноРаспределение событий по часу суток (ClickHouse)clickhouse
- EasyбесплатноЧисло записей по статус-кодам (ClickHouse)clickhouse
- EasyбесплатноСредняя задержка по сервисамclickhouse
- EasyбесплатноМинимальная и максимальная задержка по сервисамclickhouse
- MediumPremiumТолько оплаченные историиbigquery
- HardPremiumГеография каждой платформыbigquery
- ExpertPremiumХроника каждого пользователяbigquery
- MediumPremiumФинал каждой сессииbigquery
Справочник по теме
Подробные статьи с синтаксисом и примерами в справочнике SQL Arena.
Частые вопросы
Где решать задачи по SQL онлайн?
Удобнее использовать тренажёр, где запрос выполняется на реальных таблицах и результат проверяется автоматически. В SQL Arena всё работает в браузере, есть PostgreSQL, MySQL, ClickHouse и BigQuery.
Есть ли SQL задачи с решениями?
Готовый ответ полезен для разбора после собственной попытки, но для обучения важнее сначала решить задачу самостоятельно. В SQL Arena можно использовать AI-ментора для подсказки и объяснения ошибки, не переходя сразу к копированию решения.
Какие SQL задачи решать начинающим?
Начните с выборки колонок, WHERE, сортировки, простых вычислений и базовых агрегатов. После этого переходите к JOIN и задачам, где нужно объединить несколько операций. В бесплатном тарифе доступно 292 задачи, в основном уровня Easy.
Как проверяется решение задачи по SQL?
Запрос выполняется и его результат сверяется с эталоном на других, скрытых данных. Поэтому решение должно выражать правильную логику, а не просто выдавать нужные строки на одном видимом наборе.
Решите задачу без готового ответа
Выберите диалект, откройте таблицы и напишите запрос сами. 292 задачи доступны бесплатно без карты, а результат проверяется автоматически.
Открыть задачи