Что нового
История обновлений и улучшений SQL Arena. Самое свежее — сверху.
- Сюжетные иллюстрации ещё в десяти уроках курса аналитики: среднее и медиана, выбор графика под вопрос, разрезы и парадокс Симпсона, сезонность, дела о просевшем retention и провале вторника, когортная матрица, четыре числа за словом «отток» и дерево GMV.
- В задаче «Активные пользователи по дням за последний месяц» окно задано формулой: видно, что текущий день входит, и что время в точке отсчёта на выборку не влияет —
event_dateхранит календарную дату. - В задаче «Помесячные транзакции и чарджбэки» на схеме стояла связь 1:N, хотя у транзакции не больше одного чарджбэка. Связь исправлена на 1:1, и теперь это сказано прямо в условии — догадываться не нужно.
- В задаче про слияние склада на BigQuery условие прямо говорит, что запись в этом диалекте не исполняется и ответ нужно собрать одним SELECT. Отказ песочницы тоже переписан — раньше его можно было прочитать так, будто система сама создаёт таблицу до вашего запроса.
- Достижение за каждый курс: «Язык архивов» за SQL, «Дознаватель данных» за аналитику, «Дальний архив» за BigQuery и «Машинное отделение» за SQL Performance. Каждое приходит, когда пройдены все уроки своего курса, и у каждого свой значок и цвет курса.
- В карточке достижения и в уведомлении о нём теперь написано условие выдачи: сколько силы нужно для ранговых, что именно требуется для остальных. Раньше у ранговых достижений порог нигде не показывался.
- У достижений разведены значки: курсовые больше не выглядят одним и тем же знаком, а «Неделя огня», «Молния», «Две недели», «Перфекционист» и три ранговых получили каждое свой.
Курс «SQL Performance: Машинное отделение» — четвёртый курс платформы.
- Курс «SQL Performance: Машинное отделение» — 10 глав и 49 уроков о том, почему запрос идёт сорок секунд: EXPLAIN ANALYZE и BUFFERS, четыре вида скана, устройство B-tree и составные индексы, немой индекс и sargability, алгоритмы JOIN, work_mem и сортировка на диске, статистика планировщика, узкие места приложения, переписывание запросов и разбор инцидента.
- В уроках курса — живые ячейки: план запроса строится прямо на странице, на настоящей таблице в 180 тысяч строк, ничего ставить не нужно. Первая глава открыта бесплатно.
- Задачи нового типа — «Скорость»: вам дают медленный запрос, вы ускоряете его индексом или переписыванием. Проверяется не только результат, но и план запроса и то, сколько страниц он читает; после проверки видно план «до» и «после» рядом, а к каждой задаче есть три подсказки. Таких задач 76: 50 в курсе «SQL Performance» (главы 2–10) и 26 в каталоге тренажёра.
- Сюжетные иллюстрации в уроках: все главы курса BigQuery и ещё двадцать четыре урока курса аналитики.
- Задачи про индексы в каталоге переехали на данные рабочего объёма и теперь проверяются по плану запроса: индекс, который база в бою не возьмёт, больше не засчитывается как решение. Условия переписаны — там, где индекс на самом деле не помогает, задача теперь просит то, что помогает.
- Метка NEW в меню переехала на курс SQL Performance.
- Задача про добавление заметки в дневник снова решается: проверка падала с ошибкой уникального ключа при любом правильном ответе.
- В уроке «Заказы по месяцам» уточнено сравнение DATE_TRUNC и TO_CHAR: с маской «YYYY-MM» сортировка по тексту не ломается, а настоящий довод в пользу DATE_TRUNC — тип результата, с которым можно считать дальше.
- Приглашение в друзья теперь приходит уведомлением: раньше о нём узнавал только тот, кто случайно заглядывал в список друзей. Из уведомления можно сразу перейти и принять заявку, а тому, кто приглашал, придёт ответ. Приглашения, отправленные раньше, тоже появятся в уведомлениях.
- Кнопка «Следующий урок» больше не уводит в другой курс: в конце главы она открывала главу соседнего курса вместо следующей главы того же. Переходы «вперёд» и «назад» теперь всегда остаются внутри курса, который вы проходите.
- Задача «Uplift ЧОД от кампании ВТБ»: условие теперь прямо говорит, что участие в кампании считается по паре «клиент + продукт», а пример в задаче это показывает — клиент может быть в кампании по одному продукту и не быть по другому.
Курс «BigQuery: Дальний архив» — третий курс платформы.
- Курс «BigQuery: Дальний архив» — 8 глав и 27 уроков о диалекте GoogleSQL: адресация и цена запроса, SAFE-режим, типы и время, массивы и STRUCT, окна и QUALIFY, партиции и кластеризация, шарды и GA4-экспорт, JSON, MERGE и скрипты.
- 39 новых задач на диалекте BigQuery в тренажёре — теперь в каждом уроке курса есть практика с автопроверкой; всего задач BigQuery — 89.
- Ещё 15 уроков курса Data Analysis открываются сюжетной иллюстрацией — сцена эпизода идёт сразу за завязкой урока.
- Четыре ачивки за путь по курсам: первый урок, десять уроков, целый модуль и три модуля.
- Мобильное меню и сайдбар группируют разделы: Тренажёр, Песочница и Курсы сворачиваются, а новый курс носит метку NEW.
- Ачивки за ранги открываются ровно на порогах рангов — 1000, 3000, 10000 и 24000 очков.
- Задача «Суммарный баланс по клиентам»: клиенты без счетов больше не выпадают из ответа — эталон учитывает их с нулевым балансом, а условие говорит об этом явно.
- Девять задач, где эталонный ответ вёл себя по-разному в PostgreSQL, MySQL и ClickHouse, теперь дают одинаковый результат в каждом диалекте.
- Карточки курсов на главной выровнены секция к секции, кнопки под редактором — одной высоты, а узел схемы БД больше не расползается на широких таблицах.
- Кнопка «Программа курса» в шапке курса аналитики теперь открывает программу — раньше нажатие не давало никакого результата.
- Меню на телефоне теперь одинаковое на всех страницах: с главной открывается тот же список разделов, что и внутри тренажёра — раньше он был короче и в другом порядке.
- Курс «Аналитика данных» — 13 глав и 83 урока: метрики и воронки, Python и pandas, очистка данных, соединение таблиц, когорты и retention, сегменты и сезонность, A/B-тесты, дашборды и финальное расследование.
- Python выполняется прямо в браузере: ничего не нужно устанавливать, код и данные урока запускаются на вашей стороне, а ответ проверяется сразу.
- Ячейки с кодом стали редактором: нумерация строк, подсветка синтаксиса, подсветка текущей строки, отступы по Tab и Shift+Tab, автоматический отступ после двоеточия, парные скобки и кавычки.
- Поиск теперь показывает страницы Арены на русском, английском и португальском. Остальные языки продолжают работать как раньше: интерфейс, переключатель языка и прямые ссылки — без изменений.
- В задачах BigQuery запрос теперь всегда видит ровно те данные, что описаны в условии: при определённой последовательности запусков таблица могла показать больше строк, чем в примере.
- Задачи на BigQuery выполняются заметно быстрее и стабильно держат темп: песочница больше не замедляется по мере работы, а редкая ошибка отвечает за секунды, а не заставляет ждать минуту.
- Задачи на BigQuery снова выполняются подряд без сбоев: сложная схема и большие данные больше не упираются в лимит времени, отведённый на сам запрос, а редкий сбой песочницы не долетает до решения.
- В уроках курса результат под кодом появляется после нажатия «Выполнить», а не заранее. Готовый ответ на экране делал кнопку бессмысленной: нажимаешь — и ничего не меняется.
- В настройках уведомлений написано, что такое стрик и зачем он: дни подряд с решённой задачей, а за 7, 14, 30, 60, 100 и 180 дней дают ачивки.
- Вечернее письмо «спаси стрик» снова приходит тем, у кого стрик длиннее четырёх дней. Молчит оно теперь только для тех, кто обычно решает задачи позже 22:00 — им напоминание ни к чему.
- Четвёртый диалект — BigQuery (GoogleSQL) и 50 задач под него: QUALIFY, ARRAY и UNNEST, STRUCT, ARRAY_AGG, COUNTIF, запросы по таблицам-шаблонам с _TABLE_SUFFIX, SAFE_* и APPROX_*, SELECT * EXCEPT / REPLACE, PIVOT и ROLLUP. Задачи проверяют не только результат: если ту же цифру получить обычным SQL, ответ не примут — конструкция и есть тема задачи.
- Справочник знает BigQuery: 30 статей по GoogleSQL, которые открываются в задачах этого диалекта — с примерами и разбором того, чем конструкция отличается от привычной из PostgreSQL.
- Главная страница пересобрана: вместо перечисления возможностей — маршрут от первой задачи до Арены, с настоящей задачей с собеседования на первом экране, живыми счётчиками треков и вопросами уровня EASY / MEDIUM / HARD. Сама страница теперь читается как один SQL-запрос: слева идут номера строк и запрос, который дописывается по мере прокрутки. Треки под роль стали маршрутной таблицей, а песочница и фиддлы открываются прямо из нижнего края SQL-среды.
- Страница программы курса переделана. У курса теперь один адрес программы — /course, и он же встречает вернувшегося ученика: прогресс, глава и урок, на которых он остановился, и кнопка «Продолжить». Перед программой стоит блок про то, как здесь учат: настоящий запрос курса и его настоящий ответ. Главы разбиты на части, а список глав перестал быть стеной одинаковых карточек: выделяется только та глава, которую вы открыли или на которой остановились.
- Выбор тарифа Premium теперь открывается в окне прямо на странице — не нужно уходить с задачи или урока, а после оплаты вы вернётесь ровно туда, где остановились.
- SQL Arena теперь иногда подсказывает про Premium в подходящие моменты — например, после решённой задачи. Напоминание можно закрыть, и оно надолго затихнет.
- Кнопка «Продолжить» на программе курса снова ведёт туда, где вы остановились. Раньше она отправляла к самому раннему незакрытому уроку: одного пропущенного блока в третьей главе хватало, чтобы вас каждый раз возвращало назад, хотя вы читали шестую.
- Уровни сложности задач в уроках про self-join и оконные рамки приведены в соответствие с самими задачами: две задачи, помеченные более лёгкими, чем их соседи, на деле требовали больше условий и более длинного запроса.
- Курс, урок про строковые функции: в примере поиска по email стояла запись параметра из кода приложения — её нельзя было выполнить в тренажёре, и о ней в курсе нигде не рассказывалось. Теперь запрос запускается как есть, а про параметр сказано отдельно.
- Задача «Действующие сотрудники в формате ФИО»: в условии теперь сказано, что разделитель — длинное тире, и сам символ показан, чтобы его можно было скопировать. Раньше об этом было написано только в английской и французской версиях.
- Задача «Дневные обороты по банковским продуктам»: в условии теперь сказано, что в PostgreSQL столбец с суммой имеет тип MONEY, и показано, как привести его к числу. Раньше об этом можно было догадаться только по примеру ответа.
- Схема БД на странице задачи больше не сбрасывается: если вы разложили таблицы так, как вам удобно, эта раскладка остаётся на месте, пока вы правите запрос.
- Приглашение на дуэль теперь со звуком: когда вас зовут на арену или кто-то занимает место в вашей, играет короткая боевая тема — вызов живёт всего десять секунд, и его легко было пропустить, читая задачу на другой странице. Звук выключается там же, где и остальные — в профиле.
- Дуэли: SQL 1×1 против живого соперника. Создаёте арену — сложность, длина раунда, число попыток, приватная по ссылке или открытая в лобби, — и приглашение уходит игрокам, которые сейчас на сайте, по очереди, пока кто-нибудь не согласится. Ждать в арене не нужно: когда соперник займёт место, мы позовём вас на любой странице. Дальше — одна задача на двоих, общий таймер, схема данных и чат; побеждает первый, кто пришлёт верный ответ, и забирает силу.
- Непрочитанные уведомления теперь отмечаются оранжевой рамкой — тот же дизайн карточки, просто видно, что новое.
- Подсказки: в ряде задач ключевой фрагмент показывал заготовку вместо конкретного значения — теперь там стоят значения из самой задачи.
- Курс, урок «JOIN, подзапрос или CTE: выбираем инструмент»: раздел про скалярный подзапрос объяснял выбор через само определение — теперь там сказано, в чём выбор на самом деле: подставить одну величину прямо в выражение или тянуть её через JOIN либо CTE.
- Задача «Поменять пол всем сотрудникам»: в условии теперь сказано, что колонка — ENUM, и показано, как привести к нему строковые литералы в CASE.
- 22 новые ачивки — теперь их 50. Десять за тренажёр: 300 решённых задач, длинные серии (вплоть до полугода подряд), решения с первой попытки, скорость, мастер CTE и новые пороги сложности. И двенадцать за дуэли — от «Первой крови» до «Мастера арены»: режим 1×1 уже готовится к запуску, ачивки будут ждать первых бойцов. У каждой — своя иконка.
- Карточки-описания ачивок на странице статистики больше не мигают, не дублируются и не отстают от подсветки: карточка теперь одна и плавно переезжает между ачивками, а рамка и карточка всегда указывают на одно и то же.
- Диаграмма схемы теперь показывает колонки именно того диалекта, в котором вы решаете. В задачах, где ClickHouse-вариант таблицы устроен иначе, чем PostgreSQL (интервал двумя датами вместо диапазона), диаграмма показывала несуществующую колонку и прятала настоящие. Спасибо за баг-репорт со скриншотом.
- В нескольких задачах на оконные функции диаграмма схемы не показывала одну из колонок таблицы — как правило, ту самую сумму, которую требуется агрегировать. Все такие колонки добавлены с описаниями.
- Если тренажёр временно недоступен, отправка решения больше не засчитывается как попытка. Раньше такой сбой выглядел как неверный ответ и лишал бонуса за решение с первой попытки — теперь редактор прямо пишет, что это сбой на нашей стороне и попытка не потрачена. Тем, кого это задело, бонус вернули.
- В настройках редактора появился отступ: размер 2, 4 или 8, пробелы или настоящая табуляция. Настройку уважает и кнопка «Форматировать», и подсветка готовых решений — раньше всё было жёстко зашито на два пробела. Вставленный чужой запрос больше не переключает отступ незаметно.
- Настройки редактора привязаны к аккаунту: смените браузер или устройство — размер шрифта, отступ и автодополнение приедут с вами. Текущие настройки подхватятся автоматически при следующем входе.
- Редактор переносит длинные строки вместо горизонтальной прокрутки — особенно заметно в уроках и на телефоне. Отключается в настройках редактора.
- Задача «Распределение пользователей по числу твитов» больше не сбивает с толку. В таблице был лишний столбец с числом твитов, которого правильный ответ не использовал: кто читал схему и суммировал его, получал «неверно». Столбец убран, одна строка таблицы — один твит. Ожидаемый ответ не изменился, ранее решённые решения остаются верными.
- Уроки курса переведены дальше: модули про SELECT, агрегаты, изменение данных и оконные функции стали доступны на большем числе языков. Перевод продолжается.
- Урок про CTE (WITH) закрепляется задачами, в которых CTE действительно нужен. Прежние три задачи решались обычным запросом с группировкой, а WITH в них приходилось приписывать «чтобы было». Новые три так решить нельзя: в двух промежуточный результат нужен дважды, в третьей среднее считается от суммы. Спасибо за подробный разбор в баг-репорте.
- Уроки о подзапросах стали точнее. В уроке про IN и EXISTS теперь прямо объяснено, как выполняется связанный с внешней строкой подзапрос: для каждой строки внешнего запроса он запускается заново, и значение из неё внутри подзапроса фиксировано. Урок про производные таблицы объясняет, зачем подзапросу в FROM обязательное имя, а примеры ссылаются на него явно. Сюжет курса не изменился.
- Цена месячного Premium — 890 ₽ ($14 / €22 / R$68). Тарифы на 3 и 6 месяцев не изменились: 1470 ₽ и 1990 ₽.
- Подсказка об ошибке GROUP BY больше не сбивает с толку. Она называет ту самую колонку, на которую пожаловалась база, и напоминает, что правило касается не только SELECT, но и ORDER BY с HAVING. Частый случай: сортировка по имени колонки вместо алиаса агрегата — раньше подсказка отправляла искать ошибку в SELECT, где всё было верно.
- AI-наставник в задачах на создание таблиц теперь видит, что именно не совпало в структуре. Раньше по таким задачам он получал только условие и ваш запрос — и мог рассуждать не о том месте, например не замечать опечатку в имени таблицы.
- Английская версия курса теперь действительно на английском. В большинстве уроков теория, пояснения к вопросам и подписи показывались по-русски. Это задевало и остальные языки: там, где перевода фрагмента ещё нет, подставляется английский — а он был русским. Примеры запросов и данные в них не изменились, чтобы результат в песочнице совпадал с уроком.
- Задачи раздела «Транзакции» снова проверяются строго. В нескольких задачах проверка не отличала правильное решение от неправильного и засчитывала ответ, который не делал того, что просит условие. Теперь такой ответ не проходит, а задача, которую невозможно проверить, честно сообщает об ошибке вместо того, чтобы принять что угодно.
- Сертификат за прохождение курса больше не выглядит в профиле как второй сертификат «Основы SQL» — у него теперь собственное название и свой цвет.
- Разбор плана запроса заработал и в песочнице. EXPLAIN, запущенный там, показывался обычной таблицей, тогда как в тренажёре — деревом с диаграммой; теперь один и тот же вывод выглядит одинаково на обеих страницах.
EXPLAIN теперь показывается как разбор плана, а не как простыня текста: дерево с подсветкой, диаграмма времени и подсказка, какой узел съел запрос.
- Разбор плана запроса. Результат EXPLAIN и EXPLAIN ANALYZE открывается в трёх видах. «Дерево» — план с подсветкой, как в редакторе: узлы свёртываются, у каждого видно собственное время (а не время вместе с потомками, которое печатает Postgres) и полоска его доли в запросе. Самый дорогой узел помечен как узкое место. Если планировщик ошибся в оценке строк в 10 раз и больше, рядом появится значок с этим множителем — обычно именно это и объясняет, почему запрос медленный. «Диаграмма» показывает время площадью: чем шире блок, тем больше времени в нём; нажатие открывает детали узла. «Текст» — исходный вывод как есть, с кнопкой копирования.
- Результат EXPLAIN и EXPLAIN ANALYZE снова читается как дерево. Отступы в плане запроса пропадали, и все узлы вставали в один столбик — понять, что во что вложено, можно было только вручную. Теперь отступы сохраняются, вложенность видна сразу. То же исправление действует в песочнице, в эталонном ответе и в таблицах уроков.
- Если в условии задачи есть SQL-запрос, он снова виден: в паре задач на его месте оставался пустой промежуток.
- В модуле про JOIN уточнили, где ставить фильтр: для INNER JOIN двух таблиц ON и WHERE дают один и тот же результат, а разница появляется рядом с внешним соединением.
- В конце каждой статьи блога — задачи по её теме: прочитал и сразу потренировался.
- Программа курса показывает все 12 глав сразу при открытии страницы.
- На странице трека понятнее, кому он подойдёт и сколько времени займёт.
- Списки задач и треков открываются быстрее, а сами страницы стали легче.
- Ссылка на задачу в поиске и мессенджерах показывает описание целиком.
- Сайт заговорил украинским: интерфейс, меню, тарифы и юридические документы переведены полностью. Язык подхватывается автоматически для посетителей из Украины и для браузеров с украинским языком, либо выбирается вручную в переключателе языков. Задачи и статьи пока остаются на английском — их перевод в работе.
- Поле поиска в справочнике задачи больше не сливается с карточками команд: оно вынесено в отдельную полосу и выглядит как поле, в которое можно печатать.
- Карточки достижений на странице статистики больше не залипают: открыта всегда ровно одна, при уходе курсора с сетки закрывается сразу, а при переходе между значками сменяется без задержки.
- В карточке «Справочник по теме» внутри задачи появился поиск по всему справочнику: ищите по русским и английским словам, синонимам («склеить строки») и фрагментам SQL — найденная команда раскрывается карточкой с примером, не покидая задачу.
- Справочник вырос на 27 позиций: RIGHT JOIN, BETWEEN, LIKE, OFFSET, TRUNCATE, DROP TABLE, ограничения PRIMARY KEY/UNIQUE/NOT NULL/DEFAULT, CREATE VIEW, транзакции BEGIN/COMMIT/ROLLBACK, уровни изоляции, нарастающий итог, DISTINCT ON и другие.
- Курс из 12 модулей и 77 уроков виден с главной страницы вместе с программой и девятью бесплатными уроками.
- Песочница доступна прямо с главной: SQL можно выполнить без регистрации, а сохранённые запросы остаются за вами.
- На странице оплаты указаны условия возврата и то, что списание разовое: автопродления нет.
- Когда срок Premium истёк, появляется напоминание с кнопкой продления — прогресс и решённые задачи остаются на месте.
- Отписаться от писем можно прямо по ссылке из письма — без входа в аккаунт. Почтовые клиенты вроде Gmail показывают для этого свою кнопку «Отписаться». Письма о доступе к аккаунту и об оплате приходят по-прежнему.
- Фокус-радио больше не замолкает при переходе к другой задаче, а пока музыка играет, в углу экрана есть панель — с неё можно поставить паузу или выключить звук с любой страницы.
- В фокус-радио стало 13 каналов вместо пяти: добавились «Дрон», «Космос», «Джаз», «Нуар» и «Даунтемпо» со SomaFM, а к коричневому шуму — розовый, дождь и волны. Шумы генерируются в браузере и работают даже без интернета, а выбор канала теперь один список с разделами «Радио» и «Шум» вместо россыпи кнопок.
- Урок про self-join теперь объясняет, почему условие b.id > a.id стоит в ON, а не в WHERE, — по вопросу внимательного ученика.
- После регистрации можно сразу решать задачи и оформлять подписку. Письмо с подтверждением по-прежнему приходит, но ничего больше не блокирует.
- Страница тарифов показывает, что именно откроется, если вы пришли с замка, а после оплаты возвращает на ту же страницу — во всех языковых версиях сайта.
- Топ решений сообщества доступен в Premium.
- Вердикт после отправки решения появляется примерно вдвое быстрее.
- На ноутбуках правая колонка со зверем в тренажёре стала уже, чтобы списку задач доставалось больше места.
- Рамка вокруг активного поля ввода стала тоньше — раньше вокруг него рисовалось сразу два кольца.
- Задача из урока открывается в новой вкладке — и теперь, когда вы решите её и вернётесь к уроку, галочка появляется сама, без перезагрузки страницы.
- Подсказка к термину в уроке больше не уезжает за верхний край экрана: если над словом мало места, она открывается под ним.
- На схеме «GROUP BY по двум ключам» подписи столбцов больше не прячутся за ячейками, длинная строка не вылезает из карточки, а стрелка не перечёркивает подпись строки.
- В уроке «Мастер-чек: агрегация без перекосов» из текста убран служебный блок, который случайно попал в публикацию.
- На невысоких экранах реклама курса в боковом меню больше не занимает пол-экрана и не закрывает пункты меню — вместо карточки показывается компактная строка.
- На невысоких экранах карточка зверя в тренажёре больше не растягивается во весь столбец, оставляя пустое место, — статистика и характеристики видны сразу.
- На телефоне баннер о cookie мог перекрывать кнопки «Выполнить» и «Отправить» в тренажёре.
- Письма о серии решений приходят по вашему часовому поясу, а не по серверному.
- В таблицах результата внутри уроков
NULLтеперь так и подписан, а не показан пустой ячейкой — пустую строку и отсутствующее значение больше не спутать.
- В уроке «NULL: когда значения просто нет» примеры теперь работают на данных, где
NULLдействительно есть:IS NULLнаходит строку,<>наглядно её теряет, аCOALESCEпоказывает запасное значение. - На телефоне широкие таблицы в теории урока прокручиваются по горизонтали — последние столбцы больше не обрезаются.
- В уроке про строковые функции слово «нормализацию» больше не открывает подсказку про нормализацию схемы (1НФ–3НФ): там речь о приведении строк к единому виду. В уроке про схему подсказка осталась.
- Подсказки к терминам держатся за своё слово при увеличении страницы жестом на трекпаде или экране (Safari): раньше окно уезжало в сторону или не появлялось вовсе.
- Разбор ответа больше не советует ограничить вывод верхними строками в задачах, где этого не требуется, — например когда нужно вывести строку по каждому объекту.
- В задаче «Выручка капитанов» условие уточнено: нужны капитаны, чьи каюты хотя бы раз бронировали. Раньше формулировка допускала и чтение «все капитаны подряд», хотя ответ ожидался другой.
- Если ответ возвращает правильные данные, но столбцы названы иначе, тренажёр теперь так и пишет и подсказывает, что именно переименовать, — вместо общего «Столбцы не совпадают».
- Под примером ожидаемого ответа добавлено пояснение: названия столбцов в решении должны совпадать с примером.
- В двух задачах русская формулировка не называла требуемые столбцы, хотя остальные языки их называли: «Авторы, читавшие собственные статьи» (
id) и «Количество подписчиков» (followers_count). Также в первой задаче добавлено пояснение, что автор и читатель определяются одними и теми же идентификаторами.
- 200 новых задач: retention и когорты, воронки, сессии и серии активности, RFM, NULL-семантика, операции над множествами, кардинальность JOIN, оконные рамки, JSONB, текст и regexp, даты и таймзоны, ETL-логика, качество данных, многоуровневые итоги, рекурсивные CTE и LATERAL. Из них 70 сложных и 30 экспертных.
- В фильтрах каталога появился ряд «Паттерн» — подбор задач по типу разбираемой проблемы, а не по конструкции: воронки, сессии, кардинальность JOIN, качество данных и другие.
- Урок «BETWEEN, IN, LIKE»: в примерах для шаблона «%кофе%» стояло совпадение «Кофейная станция», которого этот шаблон не находит — LIKE учитывает регистр. Пример заменён, и рядом добавлено пояснение про регистр.
- В вопросах «Проверь себя» длинная строка SQL обрезалась краем карточки, и на телефоне её нельзя было пролистнуть вбок — конец условия оставался невидимым. Теперь такой код прокручивается по горизонтали.
- Список языков в свёрнутой боковой панели больше не уезжает под содержимое страницы — раньше половина названий была срезана краем карточек. «Português (Brasil)» перестало переноситься на две строки.
- Переводы боковой панели: пункт «Курс» показывался по-русски во всех остальных языках, а «Справочник» — по-английски. Оба переведены на все 24 языка, вместе с описанием курса на странице тарифов.
- У решений сообщества теперь видно СУБД, на которой решение проверено, и дату — раньше показывалось только время выполнения запроса, по которому нельзя было понять ни диалект, ни давность решения.
- На странице статистики описание награды снова видно на компьютере: раньше подсказка с условием получения открывалась только на телефоне, и на большом экране было не понять, за что даётся значок. Теперь она появляется при наведении и при переходе с клавиатуры.
- Новое письмо «С чего начать» для тех, кто завёл аккаунт, но ещё не решал задачи: короткий маршрут к первому уроку бесплатной части курса вместо еженедельной сводки. Приходит не более трёх раз, и в последнем письме прямо написано, что оно последнее.
- К предложению по улучшению теперь можно приложить скриншот или видео — раньше вложения принимались только в отчётах об ошибке. Выбранные файлы больше не сбрасываются при переключении между вкладками.
- Если вы заходите через Google, GitHub или Яндекс, в профиле теперь можно задать пароль — придёт письмо со ссылкой, и после этого в аккаунт можно входить и по email. Раньше в этом месте была форма смены пароля, которая просила текущий пароль, а его у такого аккаунта нет.
- Еженедельное письмо теперь зависит от того, как прошла неделя: если задачи были — сводка с их числом, если нет — общий счёт решённых, лучший стрик и подсказка, с какой категории проще продолжить.
- Письма о пароле стали точнее: если пароля у аккаунта ещё нет, письмо называется «Пароль для входа» и объясняет, что после этого можно заходить и по email, и через прежний сервис. Обращение в русских письмах приведено к единому виду.
- Тексты писем: убрано двойное приветствие в начале, обращение везде приведено к «вы», а напоминание о стрике больше не написано в мужском роде.
- Форма обратной связи на телефоне: кнопка отправки больше не уезжает за край экрана, а текст согласия не сжимается в узкий столбец — они располагаются друг под другом.
- Заголовки страниц «Политика конфиденциальности», «Условия использования» и «Политика cookies» больше не обрезаются на узких телефонах.
- Карточка зверя на телефоне: длинное название ранга больше не наезжает на соседнюю колонку статистики.
- Переключатель периодов подписки на странице тарифов больше не вылезает за экран на узких телефонах — он занимает всю ширину карточки, скидки −38% и −58% видны целиком.
- Карточка «Сила» в профиле: большое число больше не обрезает подпись, а разделитель тысяч соответствует языку интерфейса (12 345, а не 12,345).
- Обновлённая страница профиля: 3D-фигура зверя вашего текущего ранга, шкала прогресса до следующего ранга и обновлённые карточки статистики, сертификатов и активности в едином стиле. Центральная колонка стала шире.
- График активности на телефоне больше не сжимается в мелкие точки и не накладывает подписи месяцев друг на друга — клетки крупнее, а лента прокручивается по горизонтали. На широком экране график занимает всю ширину карточки.
- Уточнены формулировки по сообщениям пользователей: порядок слов и легенда в двух задачах, а в уроке про HAVING — оговорка о правилах списка SELECT при HAVING без GROUP BY.
- Страница курса на телефоне больше не разъезжается: карточки глав не вылезают за экран, время уроков не обрезается, а короткие главы больше не растягиваются пустотой снизу.
- Стрик теперь честно показывает 0, если вы пропустили больше двух дней. Раньше после долгого перерыва отображалось старое число дней, будто серия ещё жива.
- Еженедельные дайджесты снова приходят по субботам: письма больше не теряются, когда рассылка запускается сразу для многих сразу, а не отправленное письмо повторяется на следующем запуске.
- Задача «Пассажиры с email в домене .by» переведена в уровень «Лёгкий» — там одна таблица и один фильтр.
- Схемы в уроках курса больше не обрезаются по краям: у одиннадцати иллюстраций подписи выходили за границу картинки и текст срезало — например, в уроке про коррелированные подзапросы срезало заголовок и формулу.
- В четырёх схемах подписи налезали друг на друга: заголовки колонок в уроке про UPDATE, пометки у ограничений, легенда в схеме top-N и подписи транзакций в уроке про изоляцию.
- Урок «CASE: логика прямо в SELECT»: вопрос «Какой WHEN сработает первым?» переформулирован — спрашиваем, какая ветка определит результат, и в разборе сказано, что второе условие тоже истинно, но до него очередь не дойдёт.
- Под результатом запроса в уроке теперь написано, сколько строк показано из общего числа, — раньше было непонятно, обрезан ли хвост.
- Задача «Пять артистов с наибольшим числом попаданий в чарт»: таблица
global_song_rankбыла пустой, а проверка не учитывала попадания в Top-10 — теперь в чарте есть данные, а решение по условию (join чарта и отбор rank ≤ 10) засчитывается на всех трёх диалектах. - Экзамен уровня «Эксперт» иногда не запускался: при выпадении одного из комплектов появлялась ошибка «набор заданий пока не готов». Комплект укомплектован, а неполные наборы больше не предлагаются.
- Задание на подбор индекса в экзамене засчитывается по составу индекса, а не по его имени — так же, как в тренажёре.
- Урок «CASE: логика прямо в SELECT»: пример сортировки по бизнес-приоритету показывал только оплаченные заказы, так что сам порядок статусов не был виден. Теперь пример компактный и в нём видно, где кончается один статус и начинается следующий.
- Задача «Индикатор категории OTP-кода»: условие не говорило, что делать со строкой, подходящей под оба признака. Теперь приоритет задан явно —
paymentважнее.
- Ответ, отправленный в последнюю секунду, больше не теряется по дороге к серверу — на доставку есть небольшой запас.
- В итогах экзамена задача, ответ на которую пришёл после окончания времени, помечается «Не успели» вместо «Неверно» — с пояснением.
- Таймер экзамена теперь идёт по времени сервера: если часы на компьютере отставали, отсчёт показывал время, которого на самом деле уже не было, и ответ, отправленный «в срок», не засчитывался.
- В меню «Ещё тренажёры», в подвале и в карточках-рекомендациях появился Playwright Arena — тренажёр автотестов на Playwright.
- Проверка задач на проектирование таблиц стала терпимее к равнозначным решениям: ограничение UNIQUE и отдельный уникальный индекс по тем же колонкам, CHECK с переставленными операндами или значениями списка IN, а также более широкий целочисленный тип там, где ширина не задана, теперь засчитываются.
- Уточнили условия задач на проектирование таблиц: там, где это влияет на проверку, в тексте названы обязательность и длина колонок, точность числа, требование автоинкремента и имя индекса.
- DDL-задачи стали проверяться честнее: порядок объявления колонок и способ генерации id (SERIAL или обычный первичный ключ) больше не влияют на результат, в задачах без требования к длине строки TEXT и VARCHAR равнозначны, а задача про флаг активности стала проходимой.
- Статьи блога (а также треки и песочницы по ссылке) могли несколько минут отдавать «страница не найдена» сразу после обновления сайта. Теперь при кратком сбое показывается прежняя версия страницы.
- В условиях задач значения, выделенные жирным (например, категории для списка IN), показывались с обратными кавычками — при копировании они ломали запрос. Теперь выделение отображается корректно.
- Исправлен редкий сбой при работе в нескольких вкладках: сессия могла «разлогиниться» и показать пейволл при активной подписке. Если это случилось у вас — просто войдите заново, подписка на месте.
- Меню «Ещё тренажёры»: Python Arena — тренажёр Python-задач от нашей команды — теперь в верхнем меню, футере и карусели сайдбара.
- На телефонах у главной страницы появилось боковое меню-бургер — раньше с мобильной версии главной нельзя было перейти в другие разделы.
- Табы таблиц в панели результата можно листать, зажав мышью (и колесом) — на задачах с большим числом таблиц хвост списка был недостижим.
- Задача «Перенести старые оплаченные заказы в архив»: эталонное решение не удаляло перенесённые строки, из-за чего верные решения с DELETE отклонялись, а подсказки ИИ-наставника противоречили условию. Эталон исправлен.
- Уведомления: страница «Уведомления» в меню профиля и красная точка на аватаре. За принятый баг-репорт или предложение теперь приходит благодарность с бонусными днями Premium — в уведомлении и письмом.
- Урок про self-join: формулировка о зеркальных дублях больше не намекает, что дубли создаёт условие a.id <> b.id — они есть в выдаче с самого начала.
- Блок «Закрепление» урока «Мастер-чек» (модуль SELECT) снова проходим на бесплатном тарифе: три его задачи были ошибочно помечены как AI-генерация и не открывались.
- Прогресс блока закрепления показывает «Решено X из Y» по числу задач в списке и отдельно подсказывает, скольких достаточно для зачёта.
- Блок «Закрепление: реши задачи» теперь засчитывается автоматически, если нужные задачи уже решены (в том числе из каталога задач), а при сбое сохранения показывает понятное сообщение вместо молчания.
- Карточка-превью для соцсетей получила версионный адрес: при будущих сменах дизайна соцсети больше не смогут показывать старую картинку из своего кэша.
- Довоз строгой проверки для задачи «Capital Gain/Loss» (вариант из каталога LeetCode-1393): из-за неверного имени датасета третья операция не попала в её данные, и старое «всё, что не продажа — покупка» снова проходило.
- Задача «Разница продаж яблок и апельсинов»: проверка стала строже. Раньше засчитывались решения, считавшие апельсинами всё, что не яблоки; теперь в данных есть третий фрукт, и такие решения не проходят. Прежние неверные решения убраны из «Топ решений».
- Тем же образом ужесточена проверка в задачах «Capital Gain/Loss»: решения, считавшие покупкой всё, что не продажа, больше не проходят — в данных появилась третья операция. Прежние неверные решения убраны из «Топ решений».
- Подсказки этих задач приведены в соответствие со строгой проверкой — последняя подсказка больше не предлагает фрагмент, который не проходит.
- В бесплатном курсе снова можно пройти блок «Закрепление: реши задачи» — задачи открываются, а не отправляют на страницу тарифов. Несколько задач-закреплений в бесплатных модулях были ошибочно помечены как AI-контент и потому закрыты.
- Операторы «>=» и «<=» в тексте уроков больше не склеиваются в один символ (≥ / ≤): показываются ровно те два символа, что нужно печатать в SQL.
- В «Топ решений» код теперь с подсветкой синтаксиса — в тех же цветах, что и редактор.
- Новая карточка-превью для соцсетей — фирменная иллюстрация вместо той, что рисовал код. У статей блога превью по-прежнему своё, с заголовком статьи.
- Подписка с истёкшим сроком теперь и правда переходит в статус «истекла». Раньше она навсегда оставалась «активной»: доступ к Premium это не давало, но статус подписки показывался неверно.
- Квизы «Проверь себя» в Premium-модулях больше не помечают верный ответ красным: если Premium не активен, показывается понятная подсказка вместо ложного «Неверно».
- SQL Arena и Python Arena полностью разделены: у каждой арены свои аккаунты, свой Premium и своя база данных. Аккаунт SQL Arena больше не действует на python.coderang.dev — там нужна отдельная регистрация.
- Исправлена петля входа: страница логина перекидывала в каталог и обратно, если в браузере осталась устаревшая куки-метка сессии. Теперь вход подтверждается сервером, устаревшие куки вычищаются автоматически.
- Выбранный диалект (PostgreSQL / MySQL / ClickHouse) в фильтрах каталога теперь тоже сохраняется между визитами — вдогонку к остальным фильтрам из 7.0.20.
- Скрытые данные для проверки теперь используют другие идентификаторы, чем видимые: ответы, где id подсмотрен глазами в одной таблице и подставлен в запрос вместо JOIN/подзапроса, больше не засчитываются. Такие «решения» убраны из топов.
- Выбранные фильтры в каталоге задач (статус, сложность, тема, сортировка) больше не сбрасываются при возврате на страницу — сохраняются между визитами.
- Аудит всех 94 экзаменационных задач: в двух задачах эталон выводил
id, хотя условие просило название блюда, — правильные решения отклонялись; ещё в трёх формулировки уточнены (какие колонки выводить, учитывать ли отели без бронирований).
- Задачи на изоляцию транзакций больше не отклоняют правильные решения из-за псевдонимов колонок: проверка сравнивает значения, которые наблюдала транзакция, а не имена вида
COUNT(*) AS my_alias. - Задачи на проектирование индексов показывали в блоке «Ускорьте этот запрос индексом» сам ответ — готовый
CREATE INDEX. Теперь там запрос, который нужно ускорить. - Форма обратной связи иногда отвечала «Не удалось отправить отчёт» у вошедших пользователей, если страница была открыта дольше 15 минут: сессия незаметно устаревала. Теперь токен обновляется автоматически.
- Клик по колонке в панели «Схема БД» вставляет её в редактор в виде
Таблица.колонка— прямо в позицию курсора. Подсказка — в правом нижнем углу панели. - В урок «DELETE и TRUNCATE» добавлен раздел про
DELETE ... USING— конструкцию из задачи курса, которой раньше не было в теории.
- Убрали плашку «NEW» у пункта «Курс» в меню; внизу боковой панели на компьютерах появился блок с партнёрскими курсами, который сам листается каруселью.
- Запросы с колонками вроде
copy_id,granted_atили конструкциейOFFSETбольше не отклоняются как «небезопасные»: фильтр опасных команд ловил ключевые слова (COPY, GRANT, SET…) внутри обычных идентификаторов. - Задачи модуля DML про UPSERT и удаление сессий («Идемпотентная вставка», DO UPDATE, DO NOTHING, удаление истёкших сессий) снова принимаются: из-за относительных дат в скрытых данных проверка отклоняла даже эталонное решение.
- Убрали из условий этих задач фразу «выведите …» — они проверяются по состоянию таблицы, и SELECT в конце не нужен (об этом и говорит подсказка над редактором).
- Полный аудит каталога задач: 8 задач снова решаемы на MySQL (проверка падала на скрытых данных), исправлены эталонные решения задач «Рост выручки ресторана», «Капитализация слов II» и sa-90, где корректные запросы отклонялись проверкой.
- Обновлены примеры ожидаемого результата у 22 задач: раньше они показывали данные от старой версии датасета или время со сдвигом часового пояса.
- Уточнены условия задач: рамка окна в exam-задаче про палаты (ROWS vs RANGE), литерал города Madrid и недостающие требования к сортировке.
- AI Mentor точнее разбирает ошибки с оконными ранговыми функциями: вместо догадок про даты он фокусируется на правилах ничьих, а с третьей подсказки может назвать нужный SQL-оператор.
- Задача «Ранг клиента ВТБ по квартальному обороту» теперь находится в уроке про PARTITION BY, а пример ответа показывает разрыв рангов после одинакового оборота — так различие между RANK и DENSE_RANK видно сразу.
- Задача «Количество комментариев под постами» снова решаема по условию: вернули объяснение, что post_id поста — это его sub_id, а комментарий ссылается на пост через parent_id. Текст поправлен во всех языках.
- Восстановили условия ещё 26 задач LeetCode-серии на английском: вернули потерянные требования к сортировке, правила округления и определения, без которых корректные запросы отклонялись проверкой.
- К баг-репорту теперь прикладывается адрес последней открытой задачи — даже если отчёт отправлен со страницы обратной связи, поддержке видно, о какой задаче речь.
- Форма обратной связи теперь точно определяет страницу, с которой отправлен отчёт: раньше при переходах внутри приложения в баг-репорт могла попасть не та задача.
- В «Топе решений» больше не показываются старые ответы, которые были засчитаны до появления скрытых проверочных данных, но теперь не проходят проверку. Список также стал полезнее для обучения: короткие понятные решения показываются выше быстрых подгонов под пример.
- Задачи с сортировкой «по убыванию …» снова засчитывают верное решение: грейдер перестал требовать негласную вторичную сортировку (по домену, имени или id), которой нет в условии. Исправлено для нескольких задач (включая «Самые популярные email-домены»), где это давало ложное «решение неверно».
- Счётчик пройденных собеседований снова виден в рейтинге: на вкладке «Лига» и в досках по сложности он показывал 0, хотя пройденные собеседования есть.
- Стрелка изменения позиции теперь отображается на всех вкладках рейтинга (Лига, за неделю и месяц, по сложности), а не только на общей доске.
- Всплывающая подсказка к термину в блоке «Вопрос с собеседования» больше не обрезается краем карточки — определение теперь видно целиком.
- В «Примере ожидаемого ответа» столбцы теперь идут в том порядке, который требует условие задачи, а не во внутреннем порядке хранения данных. Раньше, например, столбец мог показываться последним, хотя в условии он первый.
- В уроках курса обычное слово «ограничение» (например в «осознанный выбор, а не ограничение») больше не подсвечивается как SQL-термин и не ведёт на определение CONSTRAINT — всплывающая подсказка остаётся только там, где речь действительно о правиле базы.
- Проверка решения больше не отвергает правильный ответ из-за порядка строк среди равных. Если задача просит отсортировать по столбцу, в котором у нескольких строк одинаковое значение, любой их взаимный порядок теперь засчитывается — раньше верный ответ мог не пройти с ошибкой «те же строки, но не в том порядке».
- Еженедельное письмо-сводка больше не пишет «0 за неделю» и «давно не решали» тем, кто занимается каждый день. В счёт недели теперь идут все задачи, решённые за последние 7 дней, включая повторные решения, которыми держат стрик.
- Напоминание о стрике больше не беспокоит тех, кто и так занимается почти каждый день: если ты был активен в большинство из последних 7 дней, вечернее письмо не приходит — ты явно вернёшься и так.
- Письма-напоминания о стрике больше не приходят тем, кто давно забросил занятия. Раньше у заброшенного стрика значение «застывало», и письмо «твой стрик под угрозой» уходило каждый вечер месяцами. Теперь напоминание шлётся, только пока стрик реально можно спасти, решив задачу сегодня.
- Исправлена схема БД в нескольких задачах: справа в тренажёре показывались таблицы из чужого набора данных (например, в задаче про средний чек выводилась схема с отелями), и вкладки данных были пустыми. Теперь диаграмма соответствует реальным таблицам задачи.
- В задачах на JOIN (датасет «Аналитик Яндекса») в превью добавлен водитель без поездок: теперь при нажатии «Выполнить» LEFT JOIN и INNER JOIN дают видимо разный результат — как и при проверке. Раньше неверный LEFT JOIN выглядел правильным в превью, но не проходил проверку.
- В программе курса теперь видно, сколько силы дают уроки: пояснение сверху (+10 за урок, +50 за модуль) и итог силы на каждой карточке модуля.
- Счётчик пройденных собеседований снова виден в рейтинге на вкладках «за неделю» и «за месяц» (показывал 0, хотя в профиле собеседования есть).
- Собеседование по уже решённой ранее задаче больше не начисляет повторные баллы: тренироваться на знакомых задачах можно, но бонус Power даётся только за первое решение в режиме собеседования.
- В рейтинге за неделю/месяц Power теперь учитывает силу за пройденные уроки курса — раньше недельная вкладка не считала уроки, и число расходилось с кабинетом.
- Удалённый аккаунт больше не блокирует повторную регистрацию: при удалении пользователя его почта освобождается, и на неё можно зарегистрироваться заново.
- Вход по входу через Google/соцсети + пароль: теперь через «Забыли пароль?» можно задать пароль аккаунту, у которого его не было (раньше для таких аккаунтов письмо не отправлялось).
- У каждой статьи справочника теперь своя картинка-превью для соцсетей и мессенджеров — с заголовком статьи вместо одной общей обложки на весь сайт.
- Навигация на телефоне стала чище: убрали бесполезные заголовки разделов («Тренажёр», «Песочница») — пункты меню теперь идут одним понятным списком.
- Оглавление «Содержание» в статьях справочника теперь по умолчанию свёрнуто — длинный список разделов больше не занимает весь первый экран. Нажмите на заголовок, чтобы развернуть его.
- Исправлены две статьи справочника (про
ASCII/CHRиTO_TIMESTAMP): из-за ошибки переноса они показывали чужой текст проEXTRACT(EPOCH). Вернули правильное содержимое, переписали их в понятный живой вид — три статьи больше не дублируют друг друга. - Технические улучшения для поиска (Google и Яндекс): убрали дублирующие языковые ссылки в карте сайта и добавили разметку для страницы блога — статьи должны лучше индексироваться.
- Статьи справочника переписаны в более живой и понятный для новичка вид: плавные объяснения, понятные примеры, нормальный русский язык вместо машинного.
- Убрали сворачиваемый блок «Главное из урока»: сюжетная часть истории теперь видна прямо в тексте урока, а не прячется в свёрнутом блоке с сухим итогом.
- Кнопка курса теперь показывает «Начать курс» тем, кто ещё не приступал, — раньше при нулевом прогрессе она всё равно предлагала «Продолжить курс».
- Если в
INSERTилиDELETEпропущено ключевое слово (INTO/FROM), тренажёр больше не сбивает с толку сообщением про «неверное имя таблицы», а мягко подсказывает, что пропущено слово — не выдавая готового ответа. - Убрали из уроков блоки «Практика», в которых задание показывалось сразу с готовым ответом. Тренировка идёт в интерактивных задачах в конце урока, где ответ нужно написать самому.
- На телефоне всплывающее определение термина больше не уезжает за край экрана и стало компактнее по размеру и шрифту.
- На телефоне при пролистывании с открытым меню каталог больше не «проступает» поверх нижней части меню.
Запустился полноценный интерактивный курс SQL — от первого SELECT до собственного аналитического проекта.
- Появился курс SQL: 12 модулей от основ (SELECT, фильтры, агрегаты, JOIN) до продвинутых тем (подзапросы и CTE, оконные функции, изменение данных, проектирование схемы, транзакции, EXPLAIN и индексы) и финального аналитического капстоуна. Внутри — теория с сюжетом и наглядными схемами, живые запросы прямо в браузере, после каждого урока — закрепляющие задачи (решите их, чтобы открыть следующий урок), мастер-чек в конце каждого модуля и разборы вопросов с собеседований.
- Премиум-подписка больше не сбрасывается по ошибке при редактировании профиля пользователя в админке — доступ к премиум-функциям сохраняется до конца оплаченного срока.
- Письмо-напоминание о серии (стрике) больше не приходит дважды и показывает актуальное число дней.
- Поправлены несколько задач тренажёра с неточными формулировками и неверными эталонными решениями (в том числе «Средняя зарплата по отделам» и «Топовые клиенты банка») — условия стали однозначными и совпадают с проверкой.
- Сообщение об ошибке в тренажёре больше не советует ошибочно «ограничить вывод верхними N строками», когда строк лишь немного больше нужного из-за неполного условия отбора. Теперь в таком случае оно прямо говорит, что в выборку попали лишние записи, и не сбивает с толку подсказкой про несуществующий лимит.
- Кнопка «Продолжить» в треке теперь открывает первую нерешённую задачу по всем модулям. Раньше, пройдя первый модуль целиком, вы всё равно попадали на самую первую задачу и листали уже решённые вручную.
- Письмо-напоминание «можно потерять серию» больше не приходит, если вы уже решили задачу в этот день. Проверка «решал сегодня» теперь учитывает ваш часовой пояс, а не календарный день по UTC.
- Исправлены ошибки 502 при открытии страниц задач и справочника с очень длинными адресами (слагами).
- Задачи на создание представления (VIEW) больше не отклоняют верные решения: проверка идёт по результату — колонкам и строкам представления, а не по дословному совпадению текста запроса с эталоном. Теперь засчитываются эквивалентные формулировки (например, DISTINCT вместо GROUP BY/HAVING или другой порядок соединений).
- Сообщения об ошибке стали точнее: вместо неверного «Строки дублируются, добавьте GROUP BY» (когда группировка уже есть, а не хватает лишь ограничения вывода) теперь описывается реальный симптом — что именно не так с результатом. Конкретные подсказки по исправлению даёт AI-наставник.
- AI-наставник больше не считает иной, но равносильный подход ошибкой: он опирается на результат, а не на форму эталонного решения, и не советует переписать корректный запрос только потому, что эталон выглядит иначе.
- В недельном и месячном рейтинге герой и ранг участника теперь совпадают с профилем: показывается фактический, наработанный за всё время, а не пересчитанный по силе за период. Само число силы подписано «за неделю» / «за месяц», чтобы не путать его с общей силой.
- Исправлена проверка задач, которые ошибочно требовали определённого порядка строк, хотя в условии о сортировке не сказано: верные ответы больше не отклоняются с ошибкой «те же строки, но не в том порядке» (например, «Капитан или гость»).
- Справочник стал полным: у каждой команды и функции теперь есть отдельная статья — от SELECT и JOIN до оконных функций, JSONB, индексов и транзакций. Все статьи доступны на русском, английском, испанском и португальском.
- В справочнике появились перекрёстные ссылки «См. также»: каждая команда ведёт к родственным (ROUND ↔ FLOOR ↔ CEIL, percentile_cont ↔ percentile_disc, семейства JSONB и JOIN) — учить темы группами стало удобнее.
- Статьи блога обзавелись оглавлением с быстрым переходом к разделам и якорными ссылками, а сами страницы стали открываться заметно быстрее. Добавлены хлебные крошки и ссылка «В справочнике» для перехода между статьёй и шпаргалкой.
- Появилась страница «О проекте» с описанием платформы.
- В схемах задач у колонок появились понятные подсказки: наведите на «?» рядом с полем — и увидите, что оно означает (например «Дата покупки», «Идентификатор заказа»). Описания добавлены ко всем колонкам во всех схемах и учитывают контекст таблицы.
- Шпаргалка внутри задачи теперь подстраивается под сложность: на средних и сложных задачах из неё убраны тривиальные пункты (SELECT, ORDER BY, LIMIT), чтобы список не отвлекал и показывал только релевантное.
- Переработан справочник: вместо облака тегов — двухпанельный вид с липким списком категорий слева (иконки и счётчики, подсветка активного раздела при прокрутке), а сами карточки стали читаемее — описание крупнее и контрастнее, второстепенные ссылки («Статья», «См. также») приглушены, чтобы не перебивать содержание. Сам «Справочник» в боковом меню поднят наверх — под «Песочницу».
- Страница тарифов для подписчиков переработана: теперь видны все планы, текущий помечен, а преимущества и другие периоды доступны для сравнения и перехода — вместо короткого сообщения «у вас премиум».
- Рейтинг теперь по умолчанию недельный: таблица сбрасывается каждый понедельник, так что у всех есть достижимый топ, а не вечно одни и те же лидеры. Вкладки идут «Неделя → Месяц → Всё время», подиум показывается в каждой, а строка «ваше место» работает в любом периоде. Вкладка «Всё время» осталась залом славы.
- Вычитан и исправлен ряд фактических неточностей в англоязычных, испанских и португальских версиях статей справочника (поведение ascii(), CAST, DATE_TRUNC по часовым поясам, округление, JSONB и др.).
- Премиум-пользователей больше не перебрасывает на страницу оплаты при открытии премиум-задачи (раньше при кратком сбое связи случался ложный редирект со словами «у вас уже есть премиум»).
- Множество правок в мобильном справочнике: теги категорий теперь в одну прокручиваемую строку, в примерах появилась цветная подсветка синтаксиса, исправлено перекрытие кнопки «Копировать» и работа фильтра «Все», поле поиска получило аккуратную единую подсветку, а код-блоки подстраиваются под светлую и тёмную тему. Также убрана лишняя серая линия в боковом меню.
- Адреса задач стали человекочитаемыми: вместо «/trainer/tasks/603» теперь «/trainer/tasks/select-all-companies» — понятнее и удобнее делиться ссылкой. Старые ссылки по номеру продолжают работать.
- Переработана панель навигации по задаче: компактный сегментированный блок «Назад · сложность · Вперёд» (уровень задачи показан цветной точкой), кнопка «Собеседование» придвинута к навигации, единый стиль наведения у всех кнопок.
- Кнопка «Следующая» больше не приводит на скрытые экзаменационные задачи с ошибкой «Задача не найдена» — навигация теперь пропускает экзаменационный пул.
- Выровнена серая линия-разделитель между вкладками задачи (Задание/Отправки/AI Mentor) и вкладками редактора запросов.
- Награда за обратную связь: подтверждённый баг-репорт или полезное предложение приносят 1–7 дней премиума. Подсказка появилась в боковом меню и на странице «Обратная связь».
- Новая подсказка в тренажёре: если во вложенном запросе колонка незаметно «цепляется» к внешней таблице (коррелированная ссылка) — например, из-за опечатки в имени колонки — показываем жёлтое предупреждение. Запрос при этом выполняется как есть, ничего не блокируется.
- Список задач больше не «мигает» при загрузке: карточки сразу открываются с правильными номерами, порядком и счётчиками — без прочерков и перескакивания, которые появились после оптимизации.
- Задача «Итоговый баланс по счетам» больше не отклоняет верное решение. В скрытых проверочных данных встречался незадокументированный тип операции, из-за которого корректный запрос мог получить вердикт «строк столько же, но значения другие». Проверка приведена в соответствие с условием задачи — только Deposit и Withdrawal.
- AI-наставник больше не выдумывает несуществующую ошибку, когда задача проверяется на скрытых данных: он опирается на эталонное решение и честно говорит, если запрос верен на видимых данных, а дело в крайнем случае — вместо ложного разбора.
- Зверь запроса на странице тренажёра снова живой: в карточке опять вращающаяся 3D-модель — после оптимизации загрузки там показывалась статичная картинка.
Большая работа над скоростью: страницы и каталог задач теперь загружаются заметно быстрее, особенно на медленном интернете и мобильных.
- Оптимизация загрузки: страницы открываются быстрее, тяжёлые элементы (редактор, 3D-звери, картинки) подгружаются умнее, а данные передаются компактнее.
Починен коварный баг вывода: при «SELECT *» с JOIN одинаковые имена колонок (например, два id) больше не путаются — на PostgreSQL и MySQL значения каждой колонки теперь верные, дубли подписаны таблицей (Doctor.id, Appointment.id).
- Результат запроса с одинаковыми именами колонок (классика — «SELECT *» по JOIN с двумя id): на PostgreSQL и MySQL значения колонок-тёзок больше не подменяются друг другом и не теряются. Дубликаты теперь подписаны таблицей-источником (Doctor.id, Appointment.id), как уже было в ClickHouse.
Большое обновление главной и тарифов: новый лендинг с 3D-зверем запроса, бесплатный тариф теперь включает все задачи уровня Easy (в том числе лёгкие вопросы с собесов), а Premium можно взять помесячно — разовой оплатой без автопродления.
- Полностью обновлённая главная: hero с 3D-зверем запроса, строка с цифрами по каталогу, сравнение одного запроса в трёх диалектах (PostgreSQL · MySQL · ClickHouse), лестница рангов, тизер PvP-дуэлей и FAQ прямо на странице.
- Раздел «Собеседование» открыт для всех: лёгкие задачи с собесов можно решать бесплатно, более сложные вопросы — в Premium.
- Помесячный Premium: можно оплатить один месяц (790 ₽ / $12) разово — без автопродления. Чем длиннее период, тем дешевле месяц: 3 месяца −38%, 6 месяцев −58%.
- Бесплатный тариф переработан: все задачи уровня Easy теперь бесплатны навсегда (включая лёгкие вопросы с реальных собеседований), а задачи Medium, Hard и Expert доступны в Premium.
- Текст страницы тарифов обновлён под текущую модель, а в боковом меню появилась ссылка «Тарифы» для пользователей без Premium.
- Задача на удаление групп без предстоящих туров (sa-55): эталонное решение теперь удаляет дочерние строки перед родительскими, поэтому правильный ответ проходит на скрытых данных без ошибки внешнего ключа.
Точнее проверка: на нескольких задачах больше нельзя «проскочить» небрежным решением — учтены крайние случаи (несколько билетов у одного фаната, аренда на стыке года).
- Эти задачи теперь проверяются на скрытых данных и в MySQL, и в ClickHouse — решения, подогнанные под числа из примера, больше не проходят.
- «Количество фанатов на каждом концерте» и похожие задачи: фанат с несколькими билетами на один концерт теперь считается один раз; правильное решение больше не требует сортировки, которой не было в условии.
- «Расходы членов клуба в 2005 году» и разбивка по жанрам: уточнено правило — учитывается полная стоимость выдачи (daily_fee × days), даже если срок аренды заканчивается уже в следующем году.
Новый диалект — ClickHouse. Больше 560 задач теперь можно решать на ClickHouse наравне с PostgreSQL и MySQL.
- Диалект ClickHouse: выбираешь ClickHouse в задаче, пишешь и проверяешь решение на живом движке — так же, как на PostgreSQL и MySQL. Более 560 задач доступны на ClickHouse (каталог, собеседования, экзамен).
- Фильтр ClickHouse в каталоге задач — быстро отобрать задачи для практики на CH.
- Выбор диалекта стал удобным выпадающим списком с версией движка (PostgreSQL 16 · MySQL 8.0 · ClickHouse 24) вместо ряда кнопок.
- Автодополнение и подсказки по ошибкам в редакторе понимают ClickHouse — функции и типы (countIf, groupArray, argMax, quantile, UInt/DateTime64/Array…) и сообщения об ошибках движка.
Починены ложная ошибка «Слишком много запросов» при отправке решений и задачи в диалекте MySQL.
- «Зверь запроса» для гостей: вместо кнопки «Пробудить зверя», которая без входа не работала, теперь размытое превью блока зверя с приглашением войти.
- Отправка решений: исчезла ложная ошибка «Слишком много запросов. Попробуй через N секунд» при первой же отправке — лимит частоты по ошибке делился между всеми пользователями сразу, теперь он персональный.
- Диалект MySQL: 24 задачи (аптека, программа лояльности авиакомпании, сеть отелей и другие) падали с ошибкой сервера ещё до проверки решения — скрытые проверочные данные содержали PostgreSQL-синтаксис. Все задачи снова решаются.
«Зверь запроса» теперь грузится на телефоне за секунды вместо минут, а на странице задач сразу видно его изображение.
- Профиль: фото теперь можно удалить — как загруженное вручную, так и подтянутое из Google / Яндекс / GitHub. После удаления показывается плитка с инициалами.
- 3D-модели зверей оптимизированы и теперь весят примерно в 40 раз меньше — на телефоне они появляются за секунды, а не за минуты.
- Пока 3D-модель грузится, на её месте показывается анимация загрузки; в карточке зверя на странице задач сразу видно его изображение вместо пустого квадрата.
- Рейтинг: колонка позиции и изменения места больше не наезжают друг на друга при больших числах (3–4 значные ранги и дельты).
«Зверь запроса» — твой личный 3D-питомец, который растёт вместе с силой; а топ-3 рейтинга теперь живой 3D-подиум.
- «Зверь запроса»: у каждого игрока появился персональный 3D-монстр. Он меняет облик по мере роста ранга и силы, а его характеристики собираются из решённых задач. Зверя видно на странице тренажёра, в профиле и в рейтинге.
- Рейтинг: топ-3 теперь живой 3D-подиум — чемпионы стоят на пьедестале со своими зверями (модель можно покрутить мышью), а у первого места корона.
- Музыка для фокуса прямо на странице задачи: компактное радио (lo-fi, Ambient, Synthwave, станция «Код» и коричневый шум) под схемой БД — чтобы легче сосредоточиться.
- Новая типографика: единый шрифт Geologica для заголовков и текста, со встроенной кириллицей и офлайн-загрузкой.
- Навигация: «Экзамен» поднялся выше в меню, а пункт «Прогресс» убран — его кнопка «Детальный прогресс» теперь на твоей карточке в рейтинге.
- Названия задач: фрагменты в
обратных кавычкахтеперь отображаются как аккуратные моно-чипы. - Режим собеседования: история сессий теперь показывает выбранные правила строгости и заработанный бонус к силе для каждой попытки; тексты обновлены под настраиваемую строгость (бонус 0–50%).
- Шкала рангов перебалансирована: пороги силы для всех рангов увеличены вдвое (Титан теперь от 40 000 силы). Ваша сила не меняется — ранг просто пересчитывается под новую шкалу.
Подсказки к неверному ответу стали честнее: никаких советов про WHERE или JOIN, которых нет в твоём запросе.
- Подсказки при неверном ответе больше не упоминают конструкции, которых нет в запросе (никаких «поправь WHERE» или «попробуй LEFT JOIN», если их у тебя нет) — текст подстраивается под твой SQL.
- Задачи со скрытым набором данных больше не показывают число строк или столбцов, противоречащее видимой таблице результата.
- Понятные сообщения вместо внутренних/англоязычных строк проверки; реже ложное предложение «войдите» при обычной ошибке.
Режим собеседования теперь настраивается: выбираешь строгость — и бонус к Power растёт вместе с ней.
- Собеседование: настраиваемая строгость (без переключения вкладок/фокуса, без вставки) и длительность. Бонус к Power до +50% — и показывается вживую при выборе. Без правил — это просто практика на время, ничего не прерывает.
- AI-ментор на бесплатном тарифе: 10 подсказок и разборов ошибок всего, а не 10 в день. Когда заканчиваются — предложение Premium прямо в панели подсказок.
- Язык интерфейса снова определяется по стране при первом заходе.
- После прохождения в режиме собеседования задача сразу отмечается решённой, а сила обновляется — больше не нужно жать «Отправить» повторно.
Все задачи теперь решаются написанием SQL — новые форматы и фильтры каталога, новые наборы задач.
- Новые типы задач: поиск ошибок, проверка качества данных, проектирование индексов, переписывание запросов, проектирование схем с ограничениями, транзакции и блокировки, права доступа (GRANT/REVOKE).
- Новые фильтры каталога: по формату задачи, сложности, статусу решения, диалекту (PostgreSQL/MySQL) и избранному.
- Задачи на права доступа проверяются по итоговому набору привилегий (принцип минимальных привилегий).
- Задачи на транзакции проверяются в реальной конкуренции: безопасные списания, атомарный перевод, идемпотентность, уровни изоляции и блокировки строк.
- Новые наборы задач: аналитика такси, изменение данных, проектирование схем, рекурсивные иерархии и продуктовые события.
- Выбранный диалект (PostgreSQL/MySQL) запоминается и сохраняется при переходе между задачами.
- У большинства задач есть превью ожидаемого результата.
- Сотни новых пошаговых подсказок и AI-ментор, который разбирает ошибки в вашем запросе.
- Все форматы стали код-пишущими: вместо выбора ответа вы пишете настоящий SQL.
- Условия задач — живые бизнес-сценарии на русском и английском; уровни сложности откалиброваны.
- AI-генерация задач: описания теперь читаются как живой бизнес-сценарий и больше не выдают решение — убраны формулы, имена SQL-функций и сухие перечисления таблиц прямо в тексте.
- Примеры компаний на главной и в Премиуме теперь зависят от языка: на русской версии — российские работодатели, на остальных — международные (Tesla, Uber, Microsoft, Spotify, Meta), чьи задачи у нас есть.
- Убрана лишняя плашка о приватности на странице профиля пользователя.
Интерфейс заговорил на всех языках Евросоюза — 21 новый язык.
- Добавлены 21 язык Евросоюза: немецкий, французский, итальянский, нидерландский, польский, румынский, греческий, чешский, венгерский, шведский, датский, финский, словацкий, болгарский, хорватский, литовский, словенский, латышский, эстонский, ирландский и мальтийский. Язык можно выбрать в переключателе или он определится автоматически по стране и языку браузера.
- Страница «Сообщить о баге» стала «Обратная связь» (адрес /feedback) с двумя вкладками: «Сообщить об ошибке» и «Предложить улучшение». Предложения по улучшению приходят команде так же, как баг-репорты.
- В настройках профиля у подписки теперь видна дата окончания, а формулировка про «разовую оплату» убрана.
- Всплывающий список выбора языка стал компактнее по высоте.
- Профили снова открываются из рейтинга для авторизованных пользователей — приватность скрывает профиль только от анонимных посетителей. URL-имя профиля больше нельзя удалить, поэтому профиль всегда доступен по ссылке.
- Оплата иностранной картой (вкладка Visa/MC) на русском сайте теперь корректно считается в долларах и проводится через Paddle, а не открывает ЮKassa с рублёвой суммой.
Сертификация: сдай экзамен под таймером и получи проверяемый сертификат уровня.
- Экзамены на сертификат: три уровня (Основы / Практик / Эксперт), по 8 задач, отдельный таймер на каждую, проходной балл 7 из 8. На каждую попытку выдаётся свой набор данных, поэтому заучить ответ заранее нельзя.
- Проверяемый сертификат с QR-кодом, который ведёт на ваш публичный профиль; раздел с сертификатами появился в профиле.
- Удаление аккаунта прямо из настроек профиля.
- Настройки профиля переоформлены в чистом списочном стиле; у Premium-пользователей появилась анимированная рамка вокруг аватара.
- Проверка решений усилена на 324 задачах: оценка идёт на скрытом наборе данных, поэтому решение больше нельзя подогнать под видимый пример.
- Автодополнение в редакторе теперь подсказывает имена CTE, объявленных через WITH, при наборе FROM/JOIN.
- AI Mentor теперь видит ошибку и текущий запрос даже после «Запустить» — появилась кнопка «Разобрать ошибку», чтобы разобрать любую ошибку, включая синтаксические.
- Задача №91: проверка усилена скрытым набором данных — решение больше нельзя подогнать под пример (например через LIMIT или фиксированную длину).
- Задача №13: из условия убрана подсказка с готовым фильтром — решение нужно вывести самому.
- Карта навыков теперь покрывает все категории задач (добавлены CTE, DDL, транзакции, оптимизация) и стала крупнее и читаемее.
- Подсказка «что подтянуть» в карте навыков указывает на тему с наибольшим числом нерешённых задач, а не на случайную.
- В графике активности за год месяцы снова подписаны полностью, а не обрезаны до одной буквы.
- Решения, возвращающие интервал времени (например, разница двух времён), больше не падают с ошибкой при отправке.
- Задача №88: данные исправлены — рейсы из Парижа теперь имеют разную длительность, а не три одинаковые строки.
- Откат изменений (Ctrl+Z) в редакторе теперь работает отдельно для каждой вкладки запроса.
- Задача №624: в описание добавлено требование округлить среднюю цену до 2 знаков после запятой.
- Подсказки SQL-редактора больше не дублируют одни и те же варианты после перехода между задачами.
- Задача №621: клубы без посетителей теперь учитываются в результате с нулевой выручкой.
- Задаче №831 поменяли уровень сложности с экспертного на средний.
SQL Arena теперь многоязычный: английский, испанский и португальский с отдельными адресами страниц и автоопределением региона.
- Переключатель языка: русский, английский, español (Испания и Латинская Америка) и português.
- При первом заходе сайт открывается на языке вашего региона; выбор запоминается.
- У каждого языка свой адрес страницы (/en, /es, /es-419, /pt-br) — такими ссылками можно делиться.
- Оплата Premium в местной валюте: рубли, доллары, евро или реалы — в зависимости от региона.
- Английская версия сайта полноценная; испанский и португальский переводятся постепенно.
Задачи на создание таблиц принимают любую корректную форму записи, подсказки при ошибке стали по делу, а одна задача с неоднозначным ответом исправлена.
- Задача на поиск самой популярной пары курсов: тестовые данные допускали несколько равноправных ответов, а проверка принимала лишь один. Теперь у задачи единственный правильный ответ.
- Задачи на CREATE TABLE отклоняли верное решение, если ученик давал имя ограничению (например,
CONSTRAINT ... PRIMARY KEY). Проверка идёт по структуре таблицы — имя ограничения больше не учитывается. - При ошибке в задаче на создание таблицы показывалась нерелевантная подсказка про
ORDER BY. Теперь подсказка по делу — про столбцы, типы, NOT NULL и ключи.
Задачи на изменение данных решаются ровно как написано в условии — без необъявленного проверочного SELECT.
- Задачи на INSERT/UPDATE/DELETE и транзакции (включая UPSERT, MERGE, SKIP LOCKED) больше не требовали дописать проверочный SELECT, о котором в условии не было ни слова. Теперь они проверяются по итоговому состоянию таблиц, а на странице видна плашка «SELECT в конце не нужен».
- Топ решений: решения служебных аккаунтов больше не попадают в список — как и в публичном рейтинге.
Задачи на создание таблиц и индексов теперь решаются ровно как написано в условии — без необъявленного SELECT; восстановлено живое обновление рейтинга.
- DDL-задачи (CREATE TABLE, ALTER, CREATE INDEX, внешние ключи) больше не требовали дописать проверочный SELECT, о котором в условии не было ни слова. Теперь они проверяются по итоговой схеме базы, а на странице видна плашка «SELECT в конце не нужен».
- Страница рейтинга: восстановлено живое обновление — WebSocket-соединение для лидерборда больше не обрывается.
- Схема данных: на части задач не отображались связи между таблицами — теперь стрелки внешних ключей видны на диаграмме.
- Окно «Верно!»: понижение ранга больше не показывается как повышение со стрелкой вверх — плашка ранга появляется только при реальном повышении.
Задачи на CREATE / ALTER TABLE и другие многошаговые решения снова можно отправлять — лимит на число запросов в одном решении был слишком жёстким.
- Лимит на количество SQL-запросов в одной отправке поднят с 3 до 20: DDL-задачи (CREATE TABLE, ALTER, индексы, триггеры) и многошаговые DML больше не отклонялись с ошибкой «слишком много запросов».
MySQL-вариант задач по всему каталогу синхронизирован с PostgreSQL — раньше часть задач в MySQL проверялась на устаревших данных.
- MySQL-вариант сотен задач грейдился на устаревшем наборе данных — сиды пересобраны, ответ в MySQL снова совпадает с PostgreSQL.
- Шесть задач, доступных только в PostgreSQL, получили рабочий MySQL-вариант.
- Задачи на CREATE TABLE / CREATE INDEX / ALTER проверяются по итоговой схеме таблиц — неверная структура больше не засчитывается как верная.
- INSERT-задачи с CURRENT_TIMESTAMP / NOW() больше не отклоняют верный ответ из-за разницы во времени запуска.
- Примеры вывода, случайно показывавшие точный ответ, заменены на неспойлерные; порядок строк проверяется там, где задача его требует.
- Сквозной аудит каталога: в нескольких десятках задач выровнены описание, проверочные данные и эталонное решение, которые разошлись между собой.
Починили проверку решений в задачах с несколькими запросами — DELETE/UPDATE с финальным SELECT теперь оцениваются правильно.
- Дата и время в результатах запросов показываются в чистом виде
2024-01-15 08:00:00вместо технического ISO-формата.
- Задачи с DML (DELETE, UPDATE, INSERT) и проверочным SELECT больше не отклоняли верный ответ как «лишние колонки».
- Задача #768: описание приведено в соответствие с проверяемым ответом.
- Подсказка при неверном решении больше не предлагает сверяться с блоком-примером — он намеренно неточный.
- Задачи на чистый UPDATE / DELETE / INSERT теперь проверяются по итоговому состоянию таблиц — неверная мутация больше не засчитывается как верная.
Поправили описания пяти задач, где текст не совпадал со схемой и ответом.
- Задачи #762, #763, #764, #765, #809: описание переписано под реальную схему и ожидаемый ответ.
- AI-генерация задач, AI Mentor и форма «Сообщить о баге»: при rate-limit показывают «попробуй через N секунд», а не «ThrottlerException».
Поправили задачу #17 — грейдер выдавал NULL из-за бага в схеме.
- Задача #17 (
average-post-hiatus): схема выровнена с сидом, грейдер снова считает корректно.
В задаче «Перенеси старьё в архив одной командой, без гонок» (#789) описание просило колонку customer_id, которой в схеме нет. Текст условия выровнен с реальной схемой и грейдером: id, status, amount.
- Задача #789 (
hard-cte-atomic-archive): описание упоминало несуществующую колонкуcustomer_id. Теперь условие совпадает со схемойorders/orders_archiveи с ожидаемыми колонкамиid, status, amount.
Сообщение «слишком много запросов» теперь показывает точный лимит и сколько секунд ждать до сброса — вместо обезличенного «ThrottlerException». Плюс серверный rate-limit поднят, чтобы быстрая навигация между задачами трека не упиралась в потолок.
- Серверный rate-limit на обычные API-запросы поднят в 5 раз — быстрая навигация между задачами трека (10+ параллельных запросов на mount) больше не упирается в потолок и не валится в 429.
- При rate-limit на отправке решения или Run теперь видно лимит (например, «лимит 30/мин») и точное «попробуй через 17 секунд». Раньше выводилось только «ThrottlerException: Too Many Requests» без подсказки сколько ждать.
Кнопка «Начать» на карточке трека снова стартует трек, а не открывает страницу трека — невидимый оверлей перехватывал клик.
- На
/trainer/tracksкнопка «Начать» в карточке трека больше не уводит на страницу трека вместо запуска. Полнокартный клик на детали трека сохранён.
SQL-песочница: пишите свои таблицы и запросы без задачи. Плюс единый широкий дизайн «бенто» для всех ключевых страниц — рейтинг, прогресс, треки, задачи, сессии.
- Новая страница
/sandbox— Monaco-редактор, схема, результат, табы по таблицам со срезом данных, шаблоны для разогрева. Анонимная сессия живёт 30 минут, у залогиненного пользователя — 7 дней. - Сохранение песочниц: до 5 на бесплатном тарифе, безлимит на Premium. Библиотека с поиском, копированием ссылки, удалением и переключением приватности.
- Единая широкая раскладка для «своих» страниц: «Мои песочницы», «Прогресс», «Рейтинг», «Сессии», «Задачи», «Треки» и страница конкретного трека — все на одной ширине с цветным hero и согласованной сеткой карточек.
Стрелки изменения позиции в таблице рейтинга вернулись — раньше колонка была пустой, потому что не было базовой точки сравнения.
- В таблице рейтинга снова показываются стрелки «поднялся / опустился / без изменений» рядом с позицией. Базовый снимок прошлой недели был засеян, дальше еженедельный крон будет обновлять его сам.
Починили баг: повторная отправка уже решённой задачи списывала Силу — бонус «решено с первой попытки» терялся. Всем пострадавшим Сила пересчитана.
- Повторная отправка решения по уже решённой задаче больше не сбрасывает бонус «решено с первой попытки» — Сила за задачу остаётся такой же, как после первого успешного сабмита.
- Задача №107 (разбивка трат по жанрам за 2005 год) больше не требует явной сортировки результата — теперь принимается любой порядок строк, как и должно быть по условию.
Починили схему БД у нескольких задач — раньше между связанными таблицами не рисовались оранжевые линии связей.
- В панели «Схема БД» у части задач не отображались связи между таблицами (оранжевые стрелки 1:N) — добавили недостающие связи в датасеты.
Поправили задачу «Раздели клиентов на низких, средних и высоких»: пример ответа и эталонное решение разъехались с условием — теперь везде идентификатор клиента и сегменты low / mid / high.
- Задача «Раздели клиентов на низких, средних и высоких» (#757): пример ответа и эталонное решение приведены в соответствие с условием — колонки
customer_id,segment, сегментыlow/mid/high, сортировка поcustomer_id.
Большое обновление под бренд «Арена»: новая главная, переписанный рейтинг с подиумом и live-обновлением, очки переименованы в «Силу», новая иконка-логотип (боевой топор), обучающие треки собраны заново, и адаптивная AI-генерация задач, которая реально смотрит на ваши последние решения.
- Новая вкладка «Лига» — 30 ближайших к вам по силе. Фильтры по сложности на глобальной вкладке (сила пересчитывается отдельно под каждую ладдер). Стрелки «вверх / вниз» у каждой позиции — сдвиг за неделю.
- Достижения: эмодзи заменены на векторные иконки в цвет категории, в браузере подтягиваются локализованные названия; на
/stats— сетка с тап-поп-апами на мобиле. Новая ачивка «10 экспертных». - Наведи на имя в рейтинге — откроется мини-карточка пользователя. Кнопка «Поделиться» рангом: ссылка ведёт на ваш публичный профиль с OG-превью.
- Главная страница переписана под бренд «Арена»: мощный заголовок «Точите SQL. Берите оффер.», live-скорборд в hero, шкала рангов с пином «Вы», секции про тренажёр / треки / AI / режим собеса / прогресс, финальный блок «Топор уже в руке. Бейте.». Адаптировано под телефоны.
- Очки переименованы в «Силу» (RU) / «Power» (EN). Иконка молнии заменена на боевой топор — он теперь и в логотипе, и в фавиконе, и в превью при отправке ссылки.
- Страница рейтинга переписана с нуля: подиум для топ-3 (золото / серебро / бронза), личная карточка прогресса с прогресс-баром до следующего ранга, единый липкий фильтр-бар, шкала рангов сразу под шапкой, закреплённая строка «вы» если вне топ-50, и обновление в реальном времени — таблица плавно реагирует на чужие решения без перезагрузки.
- Обучающие треки собраны заново. Аналитик / Бэкенд / QA / Data Engineering — это ~50 отобранных задач на трек: по нескольку представителей на связку «тема × сложность», от разогрева до EXPERT, с уклоном в задачи с реальных собесов. Добавлен трек Data Engineering, плюс отдельный трек подготовки к собесу.
- Кнопка «Сгенерировать под меня» теперь действительно адаптивная: смотрит последние 40 сабмитов, берёт тему с худшей текущей точностью и подбирает сложность под ваш уровень — засыпаешься, следующая будет проще; качаешь подряд — растёт.
- Тема по умолчанию для новых посетителей — «Ночь» (раньше открывалась «Вечер»). Если вы уже выбирал тему — ваш выбор сохраняется.
- Задача «Скажи одной цифрой: сколько у нас активных клиентов» — эталонное решение требовало клиентов с ≥2 оплаченными заказами, хотя условие говорит «хоть раз». Решение приведено в соответствие с условием.
EXPERT-задачи теперь дают честные 75 power за решение (а с бонусами — до 281), а не 10 как EASY. Лайфтайм-power у тех, кто уже их решал, пересчитан задним числом.
- В таблице наград не было строки для EXPERT — грейдер откатывался к дефолту 10 и любая EXPERT-задача давала столько же, сколько EASY. Теперь база EXPERT — 75 power, поверх неё работают те же множители (первая попытка ×2, прохождение в Mock ×1.25, решение с премиумом ×1.5), максимум за одну EXPERT-задачу — 281 power. Миграция перепрогнала
xp_totalпо всем профилям по тем же правилам, что и при сабмите, так что уже сделанные EXPERT-решения дольют разницу автоматически.
Закрыли лазейку, через которую решение можно было «угадать» из примера ответа: грейдер на 25 датасетах теперь проверяет ваш запрос на скрытых данных, отличных от тех, что видны в условии.
- Решение проверяется на тех же таблицах и колонках, что и раньше, но строки внутри отличаются от примера ответа. Любое корректное запросно-ориентированное решение по-прежнему проходит, а захардкоженное
SELECT … UNION ALL …с литералами из примера теперь падает с «wrong». Затронуто 25 датасетов из последнего наполнения каталога (lists, CTE, окна, пивоты, DML, экспертные).
Поправили две задачи по репортам учеников: разъехавшийся пример ответа в «Студенты по регионам» и описание, не сходящееся со схемой, в задаче на чистую выручку.
- Задача «Студенты по регионам» (#357): пример ответа теперь идёт по возрастанию
rn(Jack/Kim/Lars в первой строке), а в эталонном решении явныйORDER BY rnгарантирует тот же порядок. - Задача «Найдите пользователей с чистой выручкой не меньше 100» (#783): название и описание выровнены под фактические данные — это пользователи и события
purchase/refund, а не товары иsale/refund, и порог 100, а не 1000.
Шесть продвинутых задач переведены на готовую таблицу — теперь решение пишется без CREATE TABLE-преамбулы.
- Шесть задач уровня «Сложный» и «Эксперт» (UPSERT по одиночному и составному ключу, CTE с
RETURNING, bulk-INSERT … RETURNING, очередь сSKIP LOCKED, разворачивание массива черезUNNEST) перешли на стиль остальных продвинутых задач: таблица создана и при необходимости заполнена в датасете, в решении остаётся только сама проверяемая операция и финальныйSELECTдля сверки.
- Описание задачи «Счётчик просмотров» больше не расходится с примером ответа: текст и проверка теперь говорят про одну и ту же таблицу
counters(id, count)и пять прогонов одной строки.
У DDL-задач боковая панель схемы больше не показывает посторонние таблицы.
- На 10 задачах с
CREATE TABLE(от лёгких до уровня «Эксперт») схема в боковой панели рендерилась с таблицами из чужого датасета — например, у задачи про статьи показывалсяorders. Теперь панель пустая, как и должно быть, когда задача просит построить свою таблицу с нуля.
115 новых задач, тройной переключатель темы День/Вечер/Ночь и более мягкая тёмная палитра.
- Каталог расширен на 115 задач: 20 лёгких, 35 средних, 45 сложных и 15 уровня «Эксперт» — подзапросы, CTE, оконные функции, DML/DDL, MERGE, оптимизация запросов, транзакции, JSONB, рекурсия и
LATERAL. - Новый уровень сложности «Эксперт» с фиолетовой меткой и собственным фильтром в каталоге.
- Тройной переключатель темы: День (светлая), Вечер (мягкая тёмная) и Ночь (глубокая) — выбирай по освещению, чтобы глаза не уставали.
- Тёмная тема смягчена: фон стал серо-сине-чёрным (
#1B1B1FLinear-style) вместо контрастного near-black, основной текст переведён на zinc-300 — меньше halation на длинных сессиях. - В режиме «Ночь» окно SQL-редактора сидит на 3 ступени темнее канваса с лёгким уходом в чёрный — читается как утопленная панель в той же палитре.
- Справочник по теме в задаче теперь учитывает уровень сложности: на уровнях «Сложный» и «Эксперт» базовые
SELECT/WHERE/ORDER BY/LIMITскрыты, и поверх вытаскиваются продвинутые приёмы —STRING_AGG,ARRAY_AGG,GROUPING SETS,LATERAL, JSONB, partial-индексы и т.д. - Активные пилюли фильтра по сложности перешли на брендовый акцент с soft-fill вместо чёрного — больше не выбиваются из стиля светлой темы.
- Метки сложности в русской версии: «Лёгкое» → «Лёгкий», «Среднее» → «Средний», «Сложное» → «Сложный».
24 новые статьи в блоге для начинающих.
- Покрытие тем расширено: DML (
INSERT/UPDATE/DELETE), DDL (CREATE TABLE/ALTER TABLE), агрегации,DISTINCT, NULL-обработка (CASE WHEN/COALESCE/NULLIF), CTE и подзапросы, оконные функции, строковые и датовые.
- Справочник в тренажёре: каждый пункт теперь ведёт на собственную статью. Раньше четыре пункта по оконным функциям ссылались на общий обзор, теперь у
ROW_NUMBER,RANK/DENSE_RANK,PARTITION BYиLAG/LEADсвои материалы.
- В задаче №114 «Сколько кардиологических палат» переименовали ожидаемую колонку
countвwards_count— учеников путало совпадение с зарезервированным словом.
Закрыли лазейку с подгонкой ответов под пример: задачи теперь проверяются на скрытом наборе данных.
- Грейдер теперь умеет проверять задачу на отдельном скрытом наборе данных. Эталонный запрос считается на нём же, поэтому корректные решения продолжают засчитываться, а трюки с константами из примера — нет.
- Решение задачи «Старейший член клуба» с жёстко зашитым
LIMITпод пример больше не засчитывается — корректным остаётся запрос, выражающий «все строки с минимальной датой рождения».
Полировка карточек тарифов и кнопок «Войти и оформить» сразу после релиза v2.2.0.
- Цена и кнопка в карточках Free и Premium выровнены по одной линии.
- Сократили подписи под ценой для крипты и Visa/MC — оставили только название платёжной системы.
- Кнопка «Войти и оформить» снова кликабельна для незалогиненных пользователей.
Добавили оплату криптой и международными картами Visa/Mastercard, плюс закрутили антибот-защиту на входе.
- Оплата криптой через NowPayments — BTC, ETH, USDT и другие. $21 за 3 мес / $28 за 6 мес.
- Оплата международной картой Visa/Mastercard через Paddle с авто-учётом VAT/sales tax. $21 / $28.
- Селектор способа оплаты в карточке Premium: Карта РФ, Крипта, Visa/MC. Валюта меняется по выбранному методу.
- Cloudflare Turnstile на входе и регистрации — невидимая для людей, отрезает ботов.
- Аккаунт блокируется на 15 минут после 5 неверных паролей (далее экспонентой до 24 ч) с явным таймером.
- Ошибки логина и регистрации стали человеческими — больше никаких «Forbidden» и «Invalid credentials».
- Лимит решений: 5/мин и 30/15мин на пользователя. Реальные сессии не задевает.
- После входа возвращаемся на страницу, с которой жали «Войти» — включая OAuth (Google, GitHub, Yandex).
- «Выйти» с публичной страницы больше не выкидывает на главную.
Доделали починку сохранения Telegram, GitHub и LinkedIn в профиле. В прошлом релизе мы починили нормализацию ника на бэкенде, но фронт-компонент короткозамыкал onBlur и PATCH вообще не уходил — поле визуально принимало текст, на сервере ничего не оставалось, после reload поле было пустым. Теперь сравнение идёт по значению на момент focus, а не по состоянию ввода.
- Поля «Telegram», «GitHub», «LinkedIn» в профиле снова сохраняют введённое значение. Из-за useEffect, который пересчитывал «последнее сохранённое значение» на каждый ввод символа, проверка onBlur всегда сравнивала текущий текст сам с собой и пропускала PATCH-запрос. Сравниваем теперь снепшот, снятый при фокусе.
Поправили сохранение Telegram, GitHub и LinkedIn в профиле: если вводили адрес в формате t.me/username (как в плейсхолдере) — сохранялся обрезанный мусор вроде t.me. Теперь любой формат — голый ник, @ник, t.me/ник, https://t.me/ник — приводится к чистому никнейму.
- Поля «Telegram», «GitHub», «LinkedIn» в профиле корректно сохраняют ник, если вводить адрес без
https://. Раньшеt.me/durovпревращался вt.me,github.com/octocat— вgithub.com, потому что нормализатор требовал схемуhttp(s)://и без неё резал значение по первому слэшу.
Убрали ложный premium-баннер в окне результата решения: показывался даже на бесплатных задачах, и даже премиум-пользователям. Это был мёртвый код — премиум-задачи и так заблокированы на входе, до редактора их вообще не открыть.
- В модалке «Верно!» добавили горизонтальные паддинги к плашке «+50% Power per solve — go Premium» — корона и стрелка больше не липнут к границам.
- AI-ментор теперь получает компактный контекст задачи: активный SQL-диалект, таблицы, связи, ожидаемые колонки, пример ответа и diff последней проверки. Эталонный SQL используется только как приватный контекст для объяснений ошибок и поздних уровней подсказок.
- Окно «Задачи с собеседований — Premium» больше не выскакивает в фидбэк-баннере. Раньше любой server-error со словом
premiumв стек-трейсе (например, временно отсутствующая колонкаsolved_as_premiumпосле миграции) ловил подстрочный матч и рендерил upsell — даже на свободной задаче и даже премиум-пользователю.
Premium теперь даёт +50% Power за каждую решённую задачу — буст «прилипает» к задаче навсегда, даже после окончания подписки. AI-ментор перестал сваливать решение с первой же подсказки и эскалирует помощь по нарастающей. Плюс убрали стартовый комментарий -- Нажмите ▶ Запустить в редакторе первой задачи.
- Premium-подписка даёт ×1.5 Power за каждую решённую задачу. Бонус закрепляется за задачей в момент решения, поэтому остаётся в общем счёте даже если подписка позже истечёт.
- В окне «Верно!» под счётчиком +Power для бесплатных юзеров появляется приглашение «+50% Power за решение — оформи Premium» с переходом на /pricing.
- AI-ментор стал эскалировать подсказки. На первый запрос по задаче — общее направление без названий операторов; на 2-4-й — концепт и категория операции; на 5+ можно называть
LIKE/WHERE/GROUP BYнапрямую. Сброс — раз в сутки. - Объяснение неверного ответа («Объясни ошибку») теперь подчиняется тем же тирам, что и обычные подсказки — больше не выдаёт ключевые операторы при первой же ошибке.
- Закрыли хвосты аудита SQL-задач: исправили эталон в «Победителях турнира», выровняли TIMESTAMP-превью в нескольких задачах и восстановили PostgreSQL-вариант для одной AI-задачи.
- Убрали стартовый комментарий
-- Нажмите ▶ Запустить — посмотри, какие данные в таблицев редакторе первой задачи. Открытая задача теперь начинается с пустого редактора.
Перетряхнули фильтры в каталоге задач: статус стал 3-позиционным (Все / Нерешённые / Решённые) с дефолтом «Нерешённые», добавили фильтр по диалекту, чипы тем и компаний показывают сколько задач под ними сейчас, активные фильтры выведены отдельной строкой пилюль с «Сбросить всё».
- Фильтр по диалекту в каталоге: All / PG / MySQL — отдельный сегмент рядом со статусом.
- Чипы тем и компаний теперь показывают количество подходящих задач: «Окна (43)», «Тинькофф (5)». Чипы с нулём задач блёкнут.
- Строка активных фильтров: каждый текущий фильтр (поиск, сложность, статус, диалект, избранные, тема, тег, компания, регион) выводится как пилюля с ×; кнопка «Сбросить всё» возвращает к дефолтам.
- Фильтр статуса задачи стал сегментированным переключателем «Все / Нерешённые / Решённые» с дефолтом «Нерешённые». Раньше был один тогл «Скрыть решённые».
- Сортировка переехала наверх — раньше пряталась внизу под скроллом и почти не использовалась.
- Кнопка «Избранные» переехала на верхний уровень фильтров — теперь рядом с другими бинарными тогами.
- Бейдж «Фильтры N» больше не показывает «1» при первом заходе — дефолт «Нерешённые» не считается активным фильтром.
Прошлись по всему каталогу: грейдер больше не отклоняет корректные ответы из-за разной сериализации DATE и TIMESTAMP, у 60+ задач выровняли превью с реальным выводом эталонного решения, у 5 задач прибили CURRENT_DATE / NOW() к фиксированной дате — превью больше не плывёт день за днём. Плюс уточнения в задаче про помесячные транзакции по жалобе пользователя.
- Грейдер: добавили нормализацию даты-как-timestamp
2024-01-01T00:00:00.000Z↔2024-01-01— корректные ответы перестанут получать «Количество совпадает, но строки другие» из-за разного типа возврата. - Задача «Помесячные транзакции и возвраты»: в описании уточнили, что чарджбэк относится к месяцу исходной транзакции, а не к дате самого возврата; превью теперь показывает первый день месяца, а не TZ-сдвинутые ISO-даты.
- Перегенерировали sample-превью у 60+ задач: numeric-формат (
100→100.00), TZ-сдвиг (+03→+00), DATE-as-TIMESTAMP, INTERVAL-как-объект — превью теперь совпадает с тем, что возвращает реальный раннер. - Пять задач, использующих
CURRENT_DATE/NOW()/CURRENT_TIMESTAMPв seed (#170 sa-90, #601 qa-delete-stale-audit, #602 qa-signup-without-verification, #668 ru-mts-client-spend-30d, #693 ru-alfa-third-business-day): прибили к точке2026-05-05 12:00:00 UTC. Превью больше не уплывает.
Перекроили блог: поиск, навигация по 10 разделам, первые 7 статей-туториалов для начинающих. Названия команд в справочнике задачи стали кликабельными ссылками на статьи. На странице релизов — дерево версий с подсветкой при скролле.
- Блог: поиск по заголовкам/тексту/тегам и левый сайдбар с разделами. Активный раздел подсвечивается при скролле.
- Блог: 7 первых статей-туториалов —
SELECT … FROM,WHERE,ORDER BY,LIMIT,INNER JOIN,LEFT JOIN, алиасы. - Справочник по теме в задаче: названия команд стали синими ссылками на соответствующие статьи блога — открываются в новой вкладке.
- Релизы: дерево версий слева с группировкой по
major.minor, клик скроллит к версии и обновляет хеш-якорь. - Кнопка «копировать SQL» в каждой записи на вкладке «Отправки».
- Падежи числительных на всех страницах: «221 задача», «2 задачи», «5 задач» вместо прежнего «221 задач».
- Справочник по теме в задаче больше не дёргается при разворачивании — место под скроллбар теперь зарезервировано.
- Markdown-таблицы в статьях блога теперь рендерятся как HTML-таблицы, а не одной сплошной строкой.
Вычитали весь каталог: починили 23 нерешаемых задачи, переписали английские описания у 66 задач, выровняли описания и sample-превью ещё у нескольких десятков. Плюс фикс по жалобе пользователя.
- Sample-превью у 50+ задач теперь совпадает с тем, что возвращает эталонное решение.
- Схлопнули дубликаты тегов компаний в фильтрах задач.
- Починили 23 задачи (pharma-*, loyal-*, hotel-*, qa-*), которые не решались из-за несоответствия схемы и данных.
- Переписали английские описания у 66 задач lc-* / lc2-*, где раньше была заглушка или обрывок текста.
- Задача «Кабинеты, занятые 2 сентября 2019» перестала засчитывать неправильный ответ.
- У 10 задач описание расходилось с эталонным решением — привели к одному.
- У 7 задач Точки висели чужие условия — переписали под реальные задачи.
69 новых задач с реальных собеседований в российских компаниях (Яндекс, Тинькофф, Сбер, ВТБ, Альфа, ВК, Озон, Авито, Магнит, Самокат и ещё 23 компании) — с разнообразными типами данных PostgreSQL: UUID, JSONB, ENUM, INTERVAL, TSTZRANGE, INET, NUMERIC и POINT. Плюс важные фиксы по жалобам пользователей и красная точка-индикатор «Что нового» в боковом меню.
- 69 новых задач с реальных собеседований в РФ-компаниях. 33 работодателя: Яндекс, Тинькофф / T-Bank, Сбер / СберМаркет, ВТБ, Альфа-Банк, Газпромбанк, Росбанк, Совкомбанк, МТС / МТС Банк, Открытие, Renaissance Bank, Мегафон, ВК, Озон, Авито, Магнит, Лента, Wildberries, Cian, ivi, Delimobil, Aviasales, Самокат, Domclick, Lesta, Skypro, Учи.ру, Sravni.ru, Vizor, CloudReports и Yandex Practicum. Все задачи помечены как Interview и доступны в Premium.
- Богатые типы данных в схемах задач. Раньше у большинства задач столбцы были
INTиVARCHAR(100)— типично для учебных датасетов и далеко от продакшна. Теперь в новых задачах встречаютсяUUIDдля PK клиентов и заказов,NUMERIC(15,2)для денег иNUMERIC(12,4)для курсов валют,TIMESTAMPTZдля событий,INTERVALдля длительностей звонков и сессий,TSTZRANGE/DATERANGE/NUMRANGEдля SCD2-историй и валидных диапазонов цен,JSONBдля метаданных и payload-ов событий,ENUMсо своимиCREATE TYPEдля статусов и категорий,INETдля IP в антифрод-задачах,POINTдля GPS-координат,TEXT[]/INTEGER[]для тегов и списков. Так ученик встречается на тренажёре с теми же типами, что увидит в реальной БД. - Красная точка-индикатор у пункта «Что нового» в боковом меню — появляется, когда вышел новый релиз, который вы ещё не открывал. Точка пропадает после одного захода в
/releases(флаг хранится в localStorage этого браузера). Раньше индикация была только в верхней шапке; в режимах с боковым меню её было не видно.
- Корректное отображение новых типов в таблице результата запроса. Раньше столбцы
JSONB,INTERVALиPOINTрендерились как «[object Object]», а массивы (TEXT[],INTEGER[]) сжимались до строки через запятую — не было видно структуру. Теперь JSONB и массивы показываются как читаемый JSON, INTERVAL — в формате1d 02:30:00, POINT — как(x, y). Логические значения и UUID отрисовываются текстом, как и раньше. - ER-диаграмма на странице задачи получила цвета для новых типов: UUID — фиолетовый, JSONB — жёлтый, INTERVAL — фиолетовый (как другие даты-времена), TSTZRANGE / DATERANGE / NUMRANGE — розовый, INET — голубой, POINT — розовый, кастомные ENUM — алый. Раньше эти типы попадали в дефолтный серый и не выделялись среди стандартных INT / VARCHAR.
- Шесть исправленных задач (см. выше) заодно получили обогащённые схемы в стиле новых интервью-задач: добавили
UUIDPK,JSONBpayload,ENUMдля пола / категорий / статусов,NUMERIC(15,2)вместоINTдля зарплат и цен,INTERVALдля длительностей. Тексты заданий слегка переписаны под новые типы, но смысл задачи остался тем же. Это первый шаг по апгрейду старых задач — продолжим в следующих релизах.
- Поправили несколько старых задач по жалобам пользователей. «Участники проекта, часть 2» — ER-диаграмма показывала Employee + Department вместо Project + Employee, при том что в реальной схеме всё было верно; подтянули диаграмму к схеме. «Публикации с жалобами» — описание не объясняло, что причина жалобы лежит в столбце
extra: теперь это явно сказано. «Исследование продаж, часть 1» — решение использовалоSUM(price)при наличии столбцаquantity, что путало; переделали подSUM(quantity * price), более типичное для реальной выручки. «Поменять пол всем сотрудникам» — к задаче была привязана не та схема (Employee + Department вместоSalary(id, name, sex, salary)), что делало её нерешаемой; перепривязали к каноническому датасету. Дополнительно поправили те же скрытые рассинхроны в «Участники проекта, часть 3» и «Публикации с жалобами, часть 2».
Большой релиз: новая навигация с боковым меню, режим «Собеседование» с +25% Power-бонусом, публичные профили и друзья, e-mail-уведомления, цветные теги компаний, расширенные фильтры и блок с партнёрскими курсами. Плюс важный privacy-фикс между аккаунтами и десятки UX-улучшений.
- Блок с курсами от партнёров. На странице задач (на широких экранах) появилась правая колонка с подборкой подходящих курсов, на мобильном — горизонтальная карусель над списком задач. Карточки ведут на лендинги партнёров с UTM-метками — для нас это способ покрыть инфраструктуру без поднятия цены подписки.
- Новый режим «Собеседование» — строгая симуляция реального интервью. Одно нарушение (переключение вкладки, paste, выход из fullscreen, потеря фокуса > 1 сек) — мгновенный fail. Подсказки, AI Mentor и справочник скрыты и заблокированы. Длительности: 5 / 10 / 15 / 30 / 60 минут. Free-тариф — 1 попытка в день, Premium — без лимита. Во время активной сессии вся внешняя навигация (боковое меню, кнопки «Задачи», «Топ решений», «Следующая задача», «Выйти из трека», Prev/Next/Random) блокируется — выйти можно только через кнопку «Завершить» или закрытие вкладки (тогда сессия автоматически уходит в Abandoned).
- +25% Power за каждое решение задачи в режиме «Собеседование» — бонус привязан к задаче и виден на странице отчёта после сессии. В таблице рейтинга появилась информационная колонка «Mock» (та же цифра показана в карточке профиля и на
/u/<username>); на сортировку по Power она не влияет. - Публичные профили
/u/<username>: задаёшь короткое имя пользователя в профиле, включаешь публичный режим — анонимный посетитель видит ранг, Power, текущий стрик, ачивки, тепловую карту активности и ссылки на GitHub / Telegram / LinkedIn. Без логина — без приватных данных. - Друзья: добавление по публичному имени, входящие/исходящие приглашения, отдельная вкладка «Рейтинг друзей» с их Power, стриком и решёнными задачами.
- Избранное: на любой карточке задачи появилась звёздочка. Клик — задача попадает в фильтр «Только избранное». Список синхронизируется с аккаунтом и не теряется при смене браузера.
- E-mail-уведомления (галочки в профиле). «Сохраните стрик» — вечером, если у вас стрик ≥ 3 дней и сегодня ничего не решено. «Дайджест за неделю» — субботнее утро со сводкой решённых задач, текущим стриком и самой слабой категорией.
- Premium-пользователи визуально выделены везде, где видны аватары: голографическое радужное кольцо вокруг аватара (рейтинг, друзья, профиль, sidebar, публичная страница
/u/<username>); на крупных аватарах — корона в углу. Не влияет на сортировку. - Цветные теги компаний на карточках задач: жёлтый — Яндекс / Тинькофф / Билайн, зелёный — Сбербанк / Spotify / OpenAI, синий — VK / Ozon / Google / Meta, красный — МТС / Альфа / Tesla, фиолетовый — Stripe / Skypro / Wayfair, оранжевый — Amazon / Alibaba и т.д. Раньше все теги были одного фиолетового.
- Дополнительные SQL-чипы в фильтре «Тема» на странице задач: к 8 категориям (SELECT, JOIN, подзапросы, оконные, агрегатные, CTE, DML, DDL) добавлены
GROUP BY,COUNT,HAVING. Можно мешать с категориями для более точной выборки. - Панель «Схема БД» на странице задачи теперь сворачивается. Кнопка справа от названия задачи — клик и колонка прячется, освобождая ширину для редактора и результата. Состояние запоминается в этом браузере, так что в следующих задачах схема откроется в том же режиме.
- 8 новых интервью-задач от компании «Точка» — от EASY до HARD. CRM-сценарии (поиск клиентов с активной заявкой), портфельные расчёты (структура, средневзвешенный срок до погашения, динамика стоимости), запросы по облигациям с оконными функциями. Решения для PostgreSQL и MySQL.
- Раздел «Блог» (
/blog). Длинные статьи и туториалы — стартуем с разбором оконных функций. Двуязычный контент, ЧПУ-ссылки, OG-карточки для соцсетей. Доступен из футера и подвала бокового меню. - Кастомная страница 404. Раньше Next.js рисовал чёрный текст на белом фоне — в тёмной теме просто не читалось. Теперь страница использует токены темы и оборачивается в общий шелл, так что навигация остаётся под рукой.
- Полный редизайн навигации. Для залогиненных пользователей внутри приложения главное меню переехало в боковую панель слева — там сгруппированы Тренажёр, Прогресс, Рейтинг и другие разделы, под аватаром виден Power и стрик, переключатели языка и темы — внизу. На лендинге, странице тарифов и в страницах входа осталась прежняя slim-шапка сверху. Контент-страницы (Что нового / Сообщить о баге / Блог) подхватывают тип меню исходя из того, откуда вы на них пришёл.
- Премиум-обводка вокруг аватара теперь показывается на всех вкладках рейтинга — раньше радужное кольцо появлялось только на «За всё время», а на вкладках «За месяц» и «За неделю» исчезало. Бекенд для периодических рейтингов не отдавал статус подписки.
- Имя и аватар, изменённые в профиле, теперь сразу подтягиваются в боковом меню — без перезагрузки страницы. Раньше старая карточка пользователя могла висеть до полного рефреша.
- Утечки данных между аккаунтами при смене пользователя в одном браузере. Раньше после logout / login с другим аккаунтом могли сохраняться: история чата с AI Mentor, черновики SQL в редакторе, флаги «решено» по задачам, активные mock-сессии, счётчик AI-генерации, кеш избранного. Теперь при выходе и при любом входе (форма, OAuth, подтверждение e-mail) данные предыдущего пользователя очищаются.
- Ссылка «Рейтинг друзей» из профиля теперь открывает вкладку «Друзья» в рейтинге. Раньше попадала на глобальный топ, и приходилось переключать вкладку руками. Блок «Начни здесь — задачи на вечер» больше не возвращается после dismiss — раньше сбрасывался при каждом logout/login.
- Десятки правок мобильной вёрстки и взаимодействия: компактнее окно отчёта после mock-сессии, корректные отступы фильтров на узких экранах, фидбэк-баннер не наезжает на меню на 1024px, поля «имя» и «email» на странице «Сообщить о баге» для незалогиненных пользователей.
Хотфикс по UX редактора на узких экранах: окно «Настройки редактора» больше не обрезается панелью кода и не уходит за край viewport на мобильных устройствах. Плюс на мобиле теперь есть та же кнопка-шестерёнка, что и на десктопе — и размер шрифта в редакторе наконец-то применяется к мобильному вводу.
- Окно «Настройки редактора» при открытии могло обрезаться правым/левым краем экрана и не имело внутренней прокрутки — на узком ноутбуке и тем более на телефоне половины настроек просто не было видно. Попап теперь рендерится поверх всей страницы (через portal), позиция автоматически прижимается к видимой области, а если содержимое не помещается по высоте — внутри добавляется скролл. Шапка с заголовком и крестиком закрытия остаётся на месте при скролле.
- На мобильном виде редактора (≤1024px) в тулбаре раньше не было кнопки настроек редактора — открыть «Размер шрифта» можно было только с десктопа. Теперь кнопка-шестерёнка стоит рядом с PG/MySQL и Format, и изменение размера шрифта применяется к мобильному текстовому полю.
Хотфикс по баг-репорту: на задаче №240 («Премии работников») схема показывала неправильные таблицы — было видно Employee + Department вместо реальных Employee + Bonus, поэтому условие казалось бессмысленным.
- Задача №240 «Премии работников»: schema viewer показывал устаревшие таблицы
Employee + Department(с полямиdepartment_id,manager_id), а вкладкаDepartmentбыла пустой. Песочница и эталонное решение работали корректно — баг был только в UI-метаданных. Теперь схема показывает реальные таблицыEmployee + Bonusсо связьюBonus.empId → Employee.empId.
Обогатили датасеты в 268 задачах из 339 — теперь в исходных таблицах больше строк, в ожидаемом результате больше строк, и задачи перестают казаться сломанными.
- Массовое обогащение датасетов: 268 задач (из 339) получили более полные seed-данные — обычно 6-12 строк в основных таблицах вместо 2-4, с разнообразием по фильтрам/JOIN/GROUP BY референсного решения. Затронуты 137 уникальных датасетов. Reference-решения и схемы НЕ менялись. Прогресс пользователей сохранён: уже решённые задачи остаются решёнными, Power и ачивки не пересчитываются.
- Каждая обогащённая задача провалидирована: reference-решение запущено на новом датасете через executor, sample_output регенерирован из реального результата.
- Заодно правка задачи №38 (
well-paid-employees) — она была отдельным фиксом v1.2.4, теперь в общем массиве.
Хотфикс по баг-репорту: подпись над «Пример ожидаемого ответа» поясняет, что число строк там не должно совпадать с таблицами в схеме.
- Над панелью «Пример ожидаемого ответа» появилась подпись: «это пример правильного ответа — у него своё количество строк, оно не должно совпадать с таблицами в схеме». Раньше юзеры считали строки в одной из таблиц схемы и думали, что задача сломана, если их количество не совпадает с числом строк в примере.
Хотфикс по баг-репорту: задача №38 «Зарплата выше, чем у начальника» теперь работает на нормальном датасете с тремя реальными случаями. Плюс маленькая оранжевая точка на пункте «Что нового?» когда выходит свежий релиз.
- На пункте «Что нового?» в навбаре появляется маленькая оранжевая точка, когда выходит свежий релиз. Один заход в
/releases— и точка исчезает до следующего релиза.
- Задача №38 (
well-paid-employees): датасет был слишком тонким — всего 6 сотрудников и единственный кейс «подчинённый получает больше начальника». Это создавало ощущение, что данные перепутаны. Расширили до 9 сотрудников в двух отделах с тремя ясными случаями (Eve > Alice, Frank > Dave, Henry > Bob).
Страница «Сообщить о баге» с прикреплением скриншотов, вторичная группа пунктов в навбаре и компактнее лента «Начни здесь» на мобильном.
- Страница «Сообщить о баге» в навбаре: форма с темой, описанием и до 5 скриншотов/коротких видео (drag-and-drop поддерживается). Репорт улетает нам на почту, чтобы мы могли быстро посмотреть.
- В навбаре появился вторичный набор пунктов — «Что нового?» и «Сообщить о баге», отделены тонкой вертикальной линией от основной навигации.
- На мобильном лента «Начни здесь» компактнее — короткий заголовок, спрятано описание, уже карточки. Освобождает место для самих задач.
- Лента «Начни здесь» больше не мигает на долю секунды при заходе на страницу задач — теперь рендерится только после ответа
/progress. - В релиз-нотах highlight (одной строкой сверху) теперь корректно рендерит бэктики — раньше показывал литеральный «
?lang=» вместо стилизованного code-pill. - Убран фантомный вертикальный скролл на странице «Обучающие треки» —
min-h-screenв паре с навбаром давал лишние ~60px высоты даже когда контент влезал.
UX-полировка по всему тренажёру + URL-параметр ?lang= для рекламы и прямых ссылок на нужный язык.
- Можно открыть сайт сразу на нужном языке через
?lang=enили?lang=ruв URL:https://sql.coderang.dev/?lang=en. Удобно для рекламы и шаринга ссылок на конкретную локаль; язык запоминается на год.
- Когда AI-подсказки на день кончились, кнопка «Объясни» в баннере превращается в «Справочник» и открывает справочник по теме.
- Звезда «избранное» теперь видна на мобильном и слегка просвечивает на десктопе вместо полной невидимости без ховера.
- Описание задачи больше не «скачет» при разворачивании справочника. Star-кнопка ярче на ховере.
- На DDL-задачах вместо пустого ER-канваса — подсказка «нет начальных таблиц, нужно создать через CREATE TABLE».
- AI-кнопка теперь действительно пульсирует только при ошибке (раньше класс анимации не был определён в CSS).
- Power и Streak в navbar подгружаются из localStorage до серверного запроса — без скачка с «0 ⚡».
- Счётчик AI-генераций больше не сбрасывается на 0 после редиректа на сгенерированную задачу.
- Мобильные мелочи: difficulty-бейджи одинаковой ширины (Star ровно по колонке), нижний таб-бар не наезжает текстом на иконку, плавный тик дневного счётчика, tooltip на streak-иконке, корректные русские числительные («1 команда» / «2 команды» / «5 команд»).
- Названия русских компаний (Сбербанк, Яндекс, Авито…) на английском интерфейсе теперь рендерятся латиницей (Sberbank, Yandex, Avito). На русском — кириллицей как раньше.
- Названия записей в справочнике по теме («Алиасы», «Скалярный подзапрос» и т.п.) корректно переводятся при переключении языка.
- Лидерборд за неделю/месяц теперь учитывает first-try ×2 бонус и не дублирует Power от re-submission. Раньше «за месяц» отставал от «за всё время» примерно вдвое — это был баг в подсчёте, не в данных.
- Убран мёртвый таб «Solutions» из левой панели — он не открывался ни одной кнопкой, но грузил данные параллельно с «Top solutions».
- Бэктики в описаниях больше не оставляют пробел перед пунктуацией («
Action.»). - Empty-state в результатах («Здесь будет результат…») теперь корректно переводится на английский.
Полировка задач на изменение данных и общая шлифовка описаний.
- Подсказка для DDL/DML задач: на задачах с UPDATE/INSERT/DELETE и CREATE/ALTER/DROP появилась короткая плашка «SELECT в конце не нужен» — больше не нужно гадать, что выводить.
- Справочник по теме теперь учитывает тип задачи: на DML-задачах не показывает SELECT/ORDER BY/LIMIT (которые тут не используются), на DDL — только команды изменения схемы.
- Бэктики в описаниях задач (\
id = 4\, \users.email\) теперь рендерятся как акцентные code-pill вместо сырого текста — описания читаются ровно так, как авторы их пишут. - Code-блоки в справочнике получили акцентную полосу слева и тонкую границу — выглядят как настоящие сниппеты, а не серые заглушки.
Старт для новичков: лента «Начни здесь», стартовый SQL для первой задачи и справочник по теме внутри задачи. Подсказки при ошибках стали конкретными и не тратят AI-квоту.
- Лента «Начни здесь» в начале страницы задач — 8 простых SELECT-задач для тех, кто только начинает. Видна, пока ничего не решено; листается перетаскиванием с курсором-рукой.
- Стартовый SQL в редакторе. При первом открытии любой задачи в редакторе появляется готовый
SELECT * FROM <первая таблица> LIMIT 5;— нажмите ▶ и сразу увидишь данные, не нужно набирать с нуля. - Справочник по теме. Под описанием задачи появился складной блок с релевантными SQL-командами, синтаксисом и кратким объяснением — отдельный набор для SELECT, JOIN, агрегатов, подзапросов, оконных, CTE, DML, DDL.
- Подсказки в красном баннере при неправильном ответе стали конкретными: называются лишние/недостающие колонки, расхождения по строкам, проблемы сортировки и типичные SQL-ошибки. Работает локально, без расхода AI-запросов.
Алиас-aware автодополнение в SQL-редакторе и большие улучшения мобильной вёрстки.
- Страница релизов: история обновлений теперь видна на /releases.
- Алиас-aware автодополнение. Когда таблица алиасится в FROM, после
<алиас>.подсказываются только колонки этой таблицы. Сами алиасы автодополняются по Tab. - Точка
.стала trigger-character: подсказки открываются автоматически после неё, без Ctrl+Space.
- Меню на мобильных выезжает поверх контента вместо того чтобы толкать страницу вниз. Закрывается тапом снаружи.
- 300+ описаний задач переписаны: добавлен бизнес-контекст, перечислены выходные столбцы, явно указаны сортировка и округление.
- Описание задачи на мобильных теперь корректно скроллится при длинном тексте. Раньше упиралось и не давало добраться до табов внизу.
- Нижний таб-бар тренажёра всегда виден на любом мобильном браузере (Yandex Browser, MIUI, Samsung Internet). Раньше уезжал за границу viewport-а.
- Мобильное меню стало полностью непрозрачным. Раньше на 5% просвечивал контент сзади на браузерах без поддержки backdrop-filter.
- На узких экранах (320px и меньше) поле сортировки задач больше не уезжает за правый край.
- Старый баг автодополнения: при наборе
t.eпослеFROM employee tподставлялосьt.employee.salary(невалидный SQL). Теперь алиас уважается.
Первая стабильная версия SQL Arena.
- 259 курируемых SQL-задач по 6 категориям: SELECT, JOIN, агрегации, подзапросы, оконные функции, DML.
- 96 задач с реальных собеседований топ-компаний (Google, Meta, Amazon, Stripe и др.).
- Поддержка двух SQL-диалектов: PostgreSQL и MySQL с мгновенным переключением.
- AI-генерация уникальных задач, адаптированных под уровень пользователя.
- AI Mentor — контекстные подсказки без раскрытия ответа.
- 3 учебных трека: структурированные пути от основ до продвинутого SQL.
- Реалтайм-выполнение SQL в изолированной песочнице с проверкой результата (сравнение колонок, строк, порядка).
- OAuth-авторизация через GitHub, Google, Yandex и регистрация по email/паролю.
- Лидерборд по XP (Power), профили, достижения, тёмная и светлая тема.
- Premium-подписка с интеграцией ЮKassa и rate-limiting от ботов.
- Интерактивные ER-диаграммы схем, Monaco-редактор с подсветкой и форматированием SQL.
- Двуязычный интерфейс: русский и английский.