Co nowego
Historia aktualizacji SQL Arena. Najnowsze wersje na górze.
Every task is now solved by writing SQL — new task formats and catalog filters, plus new task packs.
- New task types: debugging, data-quality checks, index design, query rewriting, schema design with constraints, transactions & locking, and access permissions (GRANT/REVOKE).
- New catalog filters: by task format, difficulty, solved status, dialect (PostgreSQL/MySQL) and favorites.
- Permissions tasks are graded by the resulting privilege set (least privilege enforced).
- Transaction tasks are graded under real concurrency: safe debits, atomic transfers, idempotency, isolation levels and row locks.
- New task packs: ride-hailing analytics, data modification, schema design, recursive hierarchies and product events.
- Your chosen SQL dialect (PostgreSQL/MySQL) now persists across tasks.
- Most tasks now show a preview of the expected output.
- Hundreds of new step-by-step hints, plus an AI mentor that explains the errors in your query.
- Every format is now code-writing: you write real SQL instead of picking an answer.
- Task descriptions are living business scenarios in Russian and English; difficulty levels recalibrated.
- AI task generation: descriptions now read as a real business scenario and no longer give away the solution — formulas, SQL function names and dry table listings are kept out of the text.
- Company examples on the home page and in Premium are now locale-aware: the Russian site shows Russian employers, every other locale shows international ones (Tesla, Uber, Microsoft, Spotify, Meta) whose tasks we carry.
- Removed a stray privacy notice banner on the user profile page.
Interfejs mówi teraz w każdym języku UE — 21 nowych języków.
- Dodano 21 języków UE: niemiecki, francuski, włoski, niderlandzki, polski, rumuński, grecki, czeski, węgierski, szwedzki, duński, fiński, słowacki, bułgarski, chorwacki, litewski, słoweński, łotewski, estoński, irlandzki i maltański. Wybierz jeden w przełączniku języków albo zostanie wykryty automatycznie na podstawie Twojego kraju i języka przeglądarki.
- Strona „Zgłoś błąd” to teraz „Opinie” (pod /feedback) z dwiema kartami: „Zgłoś błąd” i „Zaproponuj ulepszenie”. Propozycje ulepszeń trafiają do zespołu tak samo jak zgłoszenia błędów.
- W ustawieniach profilu widać teraz datę zakończenia subskrypcji, a sformułowanie „płatność jednorazowa” zostało usunięte.
- Rozwijane menu przełącznika języków jest teraz bardziej kompaktowe.
- Profile znów otwierają się z rankingu dla zalogowanych użytkowników — prywatność ukrywa profil tylko przed anonimowymi odwiedzającymi. Identyfikatora URL profilu nie można już usunąć, więc każdy profil pozostaje dostępny przez link.
- Płatność kartą zagraniczną (zakładka Visa/MC) na rosyjskiej wersji strony jest teraz poprawnie wyceniana w USD i obsługiwana przez Paddle, zamiast otwierać YooKassa z kwotą w rublach.
Certyfikacja: zdaj egzamin na czas i zdobądź weryfikowalny certyfikat poziomu.
- Egzaminy certyfikacyjne: trzy poziomy (Foundations / Practitioner / Expert), po 8 zadań, osobny licznik czasu na każde zadanie, próg zaliczenia 7 z 8. Każde podejście dostaje własny zestaw danych, więc odpowiedzi nie da się zapamiętać z wyprzedzeniem.
- Weryfikowalny certyfikat z kodem QR prowadzącym do Twojego profilu publicznego; w profilu pojawiła się teraz sekcja certyfikatów.
- Usuń konto bezpośrednio z ustawień profilu.
- Ustawienia profilu zostały przeprojektowane w czytelnym stylu listy z sekcjami; użytkownicy Premium otrzymują animowany pierścień wokół awatara.
- Wzmocniono ocenianie 324 zadań: działa teraz na ukrytym zestawie danych, więc nie da się już zaliczyć przez dopasowanie do widocznego przykładu.
- Autouzupełnianie w edytorze podpowiada teraz nazwy CTE zadeklarowane przez WITH podczas wpisywania FROM/JOIN.
- AI Mentor widzi teraz Twój błąd i bieżące zapytanie nawet po uruchomieniu (Run) — nowy przycisk „Wyjaśnij mój błąd” pozwala omówić dowolny błąd, w tym błędy składni.
- Zadanie #91: ocenianie działa teraz na ukrytym zestawie danych — nie da się już zaliczyć przez dopasowanie do widocznego przykładu (np. przez LIMIT lub zakodowaną na sztywno długość).
- Zadanie #13: z treści usunięto zdradzającą rozwiązanie podpowiedź z filtrem — rozwiązanie wyprowadzasz teraz samodzielnie.
- Mapa umiejętności obejmuje teraz wszystkie kategorie zadań (dodano CTE, DDL, transakcje, optymalizację), jest też większa i czytelniejsza.
- Podpowiedź „co poprawić” na mapie umiejętności wskazuje teraz temat z największą liczbą nierozwiązanych zadań, a nie losowy.
- Roczny wykres aktywności znów pokazuje pełne nazwy miesięcy zamiast skracać je do jednej litery.
- Rozwiązania zwracające interwał czasu (np. różnicę dwóch czasów) nie zgłaszają już błędu przy wysłaniu.
- Zadanie #88: poprawiono dane — loty z Paryża mają teraz różne czasy trwania zamiast trzech identycznych wierszy.
- Cofanie (Ctrl+Z) w edytorze zachowuje teraz osobną historię dla każdej zakładki zapytania.
- Zadanie #624: w treści dodano wymóg zaokrąglenia średniej ceny do 2 miejsc po przecinku.
- Podpowiedzi edytora SQL nie duplikują już tych samych wariantów po przejściu między zadaniami.
- Zadanie #621: kluby bez członków pojawiają się teraz w wyniku z zerowym przychodem.
- Zadaniu #831 zmieniono poziom trudności z EXPERT na MEDIUM.
SQL Arena jest teraz wielojęzyczna: angielski, hiszpański i portugalski, każdy z własnymi adresami URL stron i automatycznym wykrywaniem regionu.
- Przełącznik języków: rosyjski, angielski, hiszpański (Hiszpania i Ameryka Łacińska) oraz portugalski.
- Przy pierwszej wizycie strona otwiera się w języku Twojego regionu, a Twój wybór jest zapamiętywany.
- Każdy język ma własne adresy URL stron (/en, /es, /es-419, /pt-br), które można bezpiecznie udostępniać.
- Płatność Premium w Twojej lokalnej walucie: RUB, USD, EUR lub BRL, w zależności od regionu.
- Wersja angielska jest w pełni obsługiwana; tłumaczenia na hiszpański i portugalski są stopniowo wdrażane.
Zadania na tworzenie tabel przyjmują dowolną poprawną formę zapisu, podpowiedzi przy błędzie są teraz na temat, a jedno zadanie z niejednoznaczną odpowiedzią zostało poprawione.
- Zadanie „najpopularniejsza para kursów”: dane przykładowe dopuszczały kilka równie poprawnych odpowiedzi, podczas gdy oceniarka przyjmowała tylko jedną. Zadanie ma teraz jedną poprawną odpowiedź.
- Zadania CREATE TABLE odrzucały poprawne rozwiązanie, gdy uczący się nadał nazwę ograniczeniu (np.
CONSTRAINT ... PRIMARY KEY). Ocenianie porównuje teraz strukturę tabeli — nazwy ograniczeń są ignorowane. - Niezaliczone zadanie na tworzenie tabeli pokazywało nietrafioną podpowiedź „dodaj ORDER BY”. Podpowiedź jest teraz na temat — o kolumnach, typach, NOT NULL i kluczach.
Zadania na modyfikację danych rozwiązuje się dokładnie tak, jak mówi treść — bez nieudokumentowanego weryfikującego SELECT.
- Zadania INSERT/UPDATE/DELETE i transakcyjne (w tym UPSERT, MERGE, SKIP LOCKED) nie wymagają już nieudokumentowanego weryfikującego SELECT. Oceniane są teraz na podstawie wynikowego stanu tabeli, a na stronie zadania widać adnotację „końcowy SELECT nie jest potrzebny”.
- Najlepsze rozwiązania: konta służbowe nie pojawiają się już na liście — tak samo jak w publicznym rankingu.
Zadania na tworzenie tabel i indeksów rozwiązuje się teraz dokładnie tak, jak mówi treść — bez nieudokumentowanego SELECT; znów działa odświeżanie rankingu na żywo.
- Zadania DDL (CREATE TABLE, ALTER, CREATE INDEX, klucze obce) nie wymagają już nieudokumentowanego weryfikującego SELECT. Oceniane są teraz na podstawie wynikowego schematu bazy, a na stronie zadania widać adnotację „końcowy SELECT nie jest potrzebny”.
- Strona rankingu: przywrócono odświeżanie na żywo — połączenie WebSocket rankingu nie zrywa się już.
- Diagram schematu: w niektórych zadaniach nie było widać połączeń między tabelami — strzałki kluczy obcych pojawiają się teraz na diagramie.
- Okno „Poprawnie!” nie pokazuje już spadku rangi jako awansu w górę — plakietka rangi pojawia się tylko przy prawdziwym awansie.
Zadania CREATE / ALTER TABLE i inne wieloetapowe rozwiązania można znów wysyłać — limit instrukcji na jedno wysłanie był zbyt restrykcyjny.
- Limit instrukcji na jedno wysłanie podniesiono z 3 do 20: zadania DDL (CREATE TABLE, ALTER, indeksy, wyzwalacze) i wieloetapowy DML nie są już odrzucane z błędem „zbyt wiele instrukcji”.
Wariant MySQL zadań z całego katalogu jest znów zsynchronizowany z PostgreSQL — część zadań w MySQL była oceniana na nieaktualnych danych.
- Wariant MySQL setek zadań działał na nieaktualnym zestawie danych — seedy zsynchronizowano ponownie, odpowiedź w MySQL znów zgadza się z PostgreSQL.
- Sześć zadań działających dotąd tylko w PostgreSQL ma teraz działający wariant MySQL.
- Zadania CREATE TABLE / CREATE INDEX / ALTER oceniane są na podstawie wynikowego schematu tabel — błędna struktura nie jest już zaliczana jako poprawna.
- Zadania INSERT używające CURRENT_TIMESTAMP / NOW() nie odrzucają już poprawnej odpowiedzi z powodu różnicy czasu wykonania.
- Przykładowe wyniki przypadkowo zdradzające dokładną odpowiedź zastąpiono próbkami bez spoilerów; kolejność wierszy jest wymuszana tam, gdzie zadanie tego wymaga.
- Audyt całego katalogu uspójnił treść, dane oceniające i rozwiązanie wzorcowe w kilkudziesięciu zadaniach, w których się rozjechały.
Naprawiono ocenianie rozwiązań wieloinstrukcyjnych — DELETE/UPDATE z końcowym SELECT jest teraz oceniany poprawnie.
- Daty i czasy w wynikach zapytań wyświetlają się teraz czytelnie jako
2024-01-15 08:00:00zamiast w technicznym formacie ISO.
- Zadania DML (DELETE, UPDATE, INSERT) z weryfikującym SELECT nie odrzucają już poprawnej odpowiedzi jako „nadmiarowe kolumny”.
- Zadanie #768: treść jest teraz zgodna z ocenianą odpowiedzią.
- Podpowiedź przy błędnej odpowiedzi nie sugeruje już porównywania z blokiem przykładu, który celowo nie jest dokładny.
- Zadania na czysty UPDATE / DELETE / INSERT oceniane są teraz na podstawie wynikowego stanu tabeli — błędna modyfikacja nie jest już zaliczana jako poprawna.
Poprawiono pięć zadań, w których treść nie zgadzała się ze schematem i odpowiedzią.
- Zadania #762, #763, #764, #765, #809: treść przepisano tak, aby pasowała do rzeczywistego schematu i oczekiwanej odpowiedzi.
- Generowanie zadań przez AI, AI Mentor i formularz zgłaszania błędów: przy przekroczeniu limitu pokazują teraz „spróbuj ponownie za N sekund” zamiast „ThrottlerException”.
Poprawiono zadanie #17 — oceniarka zwracała NULL z powodu błędu w schemacie.
- Zadanie #17 (
average-post-hiatus): schemat dopasowano do seeda, oceniarka znów działa.
W zadaniu „Przenieś stare wiersze do archiwum jednym poleceniem — bez wyścigów” (#789) treść prosiła o kolumnę customer_id, której nie ma w schemacie. Sformułowanie jest teraz zgodne z rzeczywistym schematem i oceniarką: id, status, amount.
- Zadanie #789 (
hard-cte-atomic-archive): opis wspominał o nieistniejącej kolumniecustomer_id. Treść jest teraz zgodna ze schematemorders/orders_archivei oczekiwanymi kolumnamiid, status, amount.
Komunikat „Zbyt wiele żądań” pokazuje teraz dokładny limit i liczbę sekund do resetu zamiast zagadkowego „ThrottlerException”. Podniesiono serwerowy limit zapytań, więc szybka nawigacja po ścieżce nie napotyka już górnej granicy.
- Serwerowy limit zapytań dla zwykłych żądań API podniesiono 5×. Szybkie przeskakiwanie między zadaniami w obrębie ścieżki (10+ równoległych zapytań przy montowaniu) nie napotyka już górnej granicy i nie kończy się błędem 429.
- Przy przekroczeniu limitu przy Submit lub Run komunikat pokazuje teraz rzeczywisty limit i dokładną liczbę sekund do ponowienia. Wcześniej pojawiał się tylko zagadkowy „ThrottlerException: Too Many Requests” bez wskazówki, ile czekać.
Przycisk „Rozpocznij” na karcie ścieżki znów faktycznie rozpoczyna ścieżkę — niewidoczna nakładka linku karty przechwytywała kliknięcie i kierowała je na stronę szczegółów ścieżki.
- Na
/trainer/tracksprzycisk „Rozpocznij” na karcie ścieżki nie przenosi już na stronę szczegółów ścieżki zamiast ją rozpoczynać. Kliknięcie w dowolnym miejscu karty → szczegóły zostaje zachowane.
Piaskownica SQL: dodaj własne tabele i zapytania — bez zadania, bez oceniania. Plus jednolity szeroki układ bento na rankingu, postępach, ścieżkach, zadaniach i sesjach.
- Nowa strona
/sandbox— edytor Monaco, panel schematu, panel wyników, zakładki danych dla każdej tabeli, fragmenty rozgrzewkowe. Sesje anonimowe wygasają po 30 min bezczynności, zalogowani użytkownicy dostają 7 dni. - Zapisane fiddle: do 5 w wersji darmowej, bez limitu w Premium. Biblioteka z wyszukiwaniem, kopiowaniem linku, usuwaniem i przełącznikiem prywatności.
- Jednolity szeroki układ na stronach przestrzeni osobistej — Moje fiddle, Postępy, Ranking, Sesje, Zadania, Ścieżki oraz strona szczegółów ścieżki mają teraz wspólny szkielet z gradientowym hero i spójną siatką kart.
Strzałki zmiany pozycji w rankingu wróciły — wcześniej kolumna była pusta, ponieważ nie było bazowej migawki do porównania.
- Wskaźnik „awans / spadek / bez zmian” wrócił obok każdego wiersza w rankingu. Bazową migawkę z poprzedniego tygodnia zaseedowano; regularny cotygodniowy cron będzie ją dalej odświeżał.
Naprawiono błąd, w którym ponowne wysłanie już rozwiązanego zadania po cichu odbierało Power — bonus za „pierwsze podejście” był kasowany. Wszystkim dotkniętym użytkownikom przeliczono Power.
- Ponowne wysłanie rozwiązania już rozwiązanego zadania nie kasuje już bonusu za „pierwsze podejście” — Power za to zadanie pozostaje taki sam jak zaraz po pierwszym udanym wysłaniu.
- Zadanie #107 (rozbicie wydatków według gatunku książki za 2005) nie wymaga już konkretnej kolejności wierszy — dowolna kolejność jest teraz przyjmowana, zgodnie z treścią zadania.
Naprawiono panel schematu bazy w kilku zadaniach — pomarańczowe linie relacji między powiązanymi tabelami nie były rysowane.
- W niektórych zadaniach panel „Schemat” nie pokazywał relacji między tabelami (pomarańczowych strzałek 1:N) — brakujące relacje dodano do zestawów danych.
Naprawiono zadanie „Podziel klientów na niskich / średnich / wysokich wydających”: przykładowa odpowiedź i rozwiązanie wzorcowe rozjechały się z treścią — teraz wszędzie używany jest identyfikator klienta i segmenty low / mid / high.
- Zadanie „Podziel klientów na niskich / średnich / wysokich wydających” (#757): przykładowa odpowiedź i rozwiązanie wzorcowe są teraz zgodne z treścią — kolumny
customer_id,segment, segmentylow/mid/high, sortowanie pocustomer_id.
Duży rebranding „Areny”: nowa strona główna, zbudowany od zera ranking z podium i aktualizacjami na żywo, punkty przemianowane na „Power” ze znakiem marki w postaci topora bojowego, przebudowane ścieżki nauki i adaptacyjne generowanie zadań przez AI, które faktycznie czyta Twoje ostatnie rozwiązania.
- Nowa zakładka „Liga” — 30 użytkowników najbliższych Tobie pod względem Power. Filtry trudności na karcie globalnej (Power przeliczany dla każdej drabiny). Strzałki awansu / spadku obok każdej pozycji — ruch tydzień do tygodnia.
- Osiągnięcia: emoji zastąpiono ikonami wektorowymi w kolorze kategorii, podpowiedzi przeglądarki pokazują zlokalizowane nazwy; na
/statsto siatka z pop-overami po dotknięciu na urządzeniach mobilnych. Nowe osiągnięcie „10 Expert”. - Najedź na nazwę w rankingu, aby zobaczyć mini-kartę użytkownika. Przycisk „Udostępnij rangę” — link prowadzi do Twojego profilu publicznego z podglądem OG.
- Strona główna napisana od nowa pod marką „Arena”: dosadny nagłówek „Sharpen SQL. Take the offer.”, tablica wyników na żywo w hero, drabina rang z przypinką „You”, sekcje o trenażerze / ścieżkach / AI / trybie Mock Interview / postępach oraz zamykający pas „The axe is in your hand. Swing.”. Gotowa na urządzenia mobilne.
- Punkty przemianowano na „Power”. Błyskawicę zastąpił topór bojowy — teraz w logo, faviconie i podglądzie przy udostępnianiu linku.
- Strona rankingu została napisana od zera: podium dla top 3 (złoto / srebro / brąz), osobista karta postępów z paskiem do następnej rangi, jeden przyklejony pasek filtrów, drabina rang tuż pod nagłówkiem, przypięty wiersz „ty”, gdy jesteś poza top 50, oraz aktualizacje na żywo — tabela płynnie reaguje na rozwiązania innych osób bez przeładowania.
- Przebudowane ścieżki nauki. Analyst / Backend / QA / Data Engineering — po ok. 50 wyselekcjonowanych zadań każda: po kilku przedstawicieli na komórkę temat×trudność, od rozgrzewki po EXPERT, z naciskiem na zadania z prawdziwych rozmów rekrutacyjnych. Dodano ścieżkę Data Engineering oraz dedykowaną ścieżkę przygotowania do rozmowy.
- Przycisk „Wygeneruj dla mnie” jest teraz naprawdę adaptacyjny: czyta Twoje ostatnie 40 wysłanych rozwiązań, wybiera temat z najgorszą bieżącą skutecznością i kalibruje trudność do Twojego poziomu — zacięcie się obniża trudność kolejnego o stopień, seria ją podnosi.
- Nowi użytkownicy trafiają domyślnie na motyw „Night” (wcześniej „Evening”). Jeśli już wybrałeś motyw, Twój wybór zostaje zachowany.
- Zadanie „Powiedz jedną liczbą: ilu mamy aktywnych klientów” — rozwiązanie kanoniczne wymagało klientów z ≥2 opłaconymi zamówieniami, podczas gdy opis mówi „co najmniej raz”. Poprawiono, aby pasowało do opisu.
Zadania EXPERT przyznają teraz prawdziwe 75 Power za rozwiązanie (do 281 z bonusami) zamiast 10 jak w poziomie EASY. Łączny Power użytkowników, którzy już ukończyli zadanie EXPERT, przeliczono wstecznie.
- Tabela nagród nie miała wiersza dla EXPERT, więc oceniarka korzystała z domyślnej wartości 10 i każde zadanie EXPERT dawało tyle samo co EASY. Baza EXPERT to teraz 75 Power, z tymi samymi mnożnikami na wierzchu (pierwsze podejście ×2, zaliczenie Mock Interview ×1,25, rozwiązanie premium ×1,5) — do 281 Power za zadanie EXPERT. Migracja przeliczyła
xp_totaldla każdego profilu według poprawionych reguł, więc każdy, kto już rozwiązał zadanie EXPERT, automatycznie odbiera brakujący Power.
Zamknięto lukę, dzięki której zadanie można było „rozwiązać” przez zakodowanie na sztywno przykładowego wyniku: w 25 zestawach danych oceniarka sprawdza teraz Twoje zapytanie na ukrytych wierszach różniących się od pokazanych w treści zadania.
- Rozwiązania nadal działają na tych samych tabelach i kolumnach co wcześniej, ale wiersze w seedzie oceniającym różnią się od widocznej próbki. Każda prawdziwa odpowiedź oparta na zapytaniu nadal przechodzi, podczas gdy zakodowany na sztywno
SELECT … UNION ALL …kopiujący literały z próbki jest teraz oceniany jako „błędny”. Objęto 25 zestawów danych z najnowszej partii katalogu (listy, CTE, funkcje okna, pivot, DML, expert).
Załatano dwa problemy z zadaniami zgłoszone przez uczących się: źle posortowaną próbkę w „Studenci według regionu” oraz opis rozjeżdżający się ze schematem w zadaniu o przychodzie netto.
- Zadanie „Studenci według regionu” (#357): próbka jest teraz uporządkowana rosnąco według
rn(Jack / Kim / Lars w pierwszym wierszu), a rozwiązanie wzorcowe zawiera jawneORDER BY rn, aby dawało tę samą kolejność. - Zadanie „Użytkownicy z przychodem netto co najmniej 100” (#783): tytuł i opis są teraz zgodne z rzeczywistymi danymi — użytkownicy i zdarzenia
purchase/refund, a nie produkty isale/refund, z progiem 100, a nie 1000.
Sześć zaawansowanych zadań ma teraz wstępnie zaseedowaną tabelę — rozwiązania nie zaczynają się już od preambuły CREATE TABLE.
- Sześć zadań Hard / Expert (jedno- i wielokolumnowy UPSERT, CTE z
RETURNING, masowyINSERT … RETURNING, kolejkaSKIP LOCKED, rozwijanie tablicy przezUNNEST) dołączyło do reszty zaawansowanego katalogu: tabela jest tworzona i seedowana w zestawie danych, a w rozwiązaniu pozostaje sama testowana operacja plus końcowySELECTdo oceny.
- Opis zadania „Licznik wyświetleń” nie rozjeżdża się już z oczekiwanym wynikiem: oba opisują teraz tę samą tabelę
counters(id, count)i pięć uruchomień tego samego wiersza.
Zadania DDL nie pokazują już niepowiązanych tabel w bocznym panelu schematu.
- W 10 zadaniach
CREATE TABLE(od łatwych po eksperckie) boczny panel schematu renderował tabele z niepowiązanego zestawu danych — np. zadanie o artykułach pokazywałoorders. Panel jest teraz pusty, tak jak powinno być, gdy zadanie wymaga zbudowania tabeli od zera.
115 nowych zadań, trójtrybowy przełącznik motywu Day / Evening / Night oraz łagodniejsza ciemna paleta.
- Katalog powiększył się o 115 zadań: 20 łatwych, 35 średnich, 45 trudnych i 15 eksperckich — podzapytania, CTE, funkcje okna, DML/DDL, MERGE, optymalizacja zapytań, transakcje, JSONB, rekurencja i
LATERAL. - Nowy poziom trudności „Expert” z fioletową plakietką i własnym filtrem w katalogu.
- Trójtrybowy przełącznik motywu: Day (jasny), Evening (łagodny ciemny) i Night (głęboki) — wybieraj według oświetlenia, by zmniejszyć zmęczenie oczu.
- Złagodzono ciemny motyw: tło przeszło na szaroniebieski w stylu Linear (
#1B1B1F) zamiast wcześniejszego prawie czarnego, tekst podstawowy obniżono do zinc-300 — mniej halacji podczas długich sesji. - W trybie „Night” panel edytora SQL leży trzy stopnie głębiej niż tło, z lekkim przesunięciem ku prawdziwej czerni — czyta się jak wpuszczony panel z tej samej rodziny.
- Ściągawka tematyczna w zadaniu uwzględnia teraz trudność: na poziomach Hard / Expert ukrywa podstawowe
SELECT/WHERE/ORDER BY/LIMIT, a w zamian wydobywa zaawansowane wzorce —STRING_AGG,ARRAY_AGG,GROUPING SETS,LATERAL, JSONB, indeksy częściowe i tak dalej. - Aktywne pigułki filtra trudności przeszły na miękkie wypełnienie w kolorze akcentu marki zamiast pełnej czerni — nie psują już wyglądu jasnego motywu.
- Rosyjskie etykiety trudności: «Лёгкое» → «Лёгкий», «Среднее» → «Средний», «Сложное» → «Сложный».
24 nowe artykuły na blogu dla początkujących.
- Rozszerzono zakres tematów: DML (
INSERT/UPDATE/DELETE), DDL (CREATE TABLE/ALTER TABLE), agregaty,DISTINCT, obsługa NULL (CASE WHEN/COALESCE/NULLIF), CTE i podzapytania, funkcje okna, ciągi znaków i daty.
- Ściągawka w trenażerze: każdy element prowadzi teraz do własnego artykułu. Wcześniej cztery elementy o funkcjach okna linkowały do jednego przeglądu —
ROW_NUMBER,RANK/DENSE_RANK,PARTITION BYiLAG/LEADmają teraz własne.
- Zadanie #114 „Ile oddziałów kardiologicznych” — zmieniono nazwę oczekiwanej kolumny wyjściowej z
countnawards_count, aby nie kolidowała wizualnie ze słowem zarezerwowanym.
Zamknięto lukę z dopasowywaniem odpowiedzi do przykładu: zadania są teraz oceniane na ukrytym zestawie danych.
- Oceniarka potrafi teraz sprawdzić zadanie na ukrytym zestawie danych. Wzorzec kanoniczny jest przeliczany na tych samych danych, więc poprawne rozwiązania nadal przechodzą, a stałe zapożyczone z widocznej próbki odpadają.
- Zadanie „Najstarszy członek klubu” nie przyjmuje już zakodowanego na sztywno
LIMITdopasowanego do widocznej próbki — przechodzi tylko zapytanie wyrażające „wszystkie wiersze z minimalną datą urodzenia”.
Dopracowanie karty cennika i poprawki przycisku „Zaloguj się i subskrybuj” tuż po v2.2.0.
- Cena i przycisk CTA na kartach Free i Premium są teraz wyrównane do tej samej wysokości.
- Przycięto przypisy ceny dla Crypto i Visa/MC — pozostaje tylko nazwa systemu płatności.
- Przycisk „Zaloguj się i subskrybuj” jest znów klikalny dla niezalogowanych użytkowników.
Dodano płatności kryptowalutami oraz międzynarodowymi kartami Visa/Mastercard, a także wzmocniono zabezpieczenia antybotowe w procesie logowania.
- Płatności kryptowalutami przez NowPayments — BTC, ETH, USDT i inne. 21 USD kwartalnie / 28 USD za pół roku.
- Międzynarodowe karty Visa/Mastercard przez Paddle z automatycznym VAT/podatkiem od sprzedaży. 21 USD / 28 USD.
- Wybór metody płatności na karcie Premium: karta RU, Crypto, Visa/MC. Waluta zmienia się zależnie od metody.
- Cloudflare Turnstile przy logowaniu i rejestracji — niewidoczny dla ludzi, blokuje boty.
- Konto blokuje się na 15 min po 5 błędnych hasłach (dalej wykładniczo do 24 h) z wyraźnym odliczaniem.
- Błędy logowania i rejestracji są teraz przystępne — koniec z surowym „Forbidden” czy „Invalid credentials”.
- Limit wysyłania rozwiązań: 5/min, 30/15 min na użytkownika. Nie wpływa na prawdziwe sesje rozwiązywania.
- Po zalogowaniu wracamy na stronę, z której przyszedłeś — w tym przy OAuth (Google, GitHub, Yandex).
- Wylogowanie ze strony publicznej nie wyrzuca już na stronę główną.
Dokończono naprawę zapisywania pól Telegram, GitHub i LinkedIn na stronie profilu. Poprzednie wydanie naprawiło normalizator nazwy użytkownika na backendzie, ale komponent front-endu przerywał obsługę onBlur — żądanie PATCH nigdy faktycznie nie było wysyłane. Pole wizualnie przyjmowało wpis, serwer pozostawał pusty, a po przeładowaniu pole było puste. Teraz porównanie przy utracie fokusu używa wartości zapamiętanej w momencie uzyskania fokusu, a nie bieżącego wpisu.
- Pola Telegram, GitHub i LinkedIn na stronie profilu znów się zapisują. useEffect nadpisywał referencję „ostatnio zapisane” przy każdym naciśnięciu klawisza, więc sprawdzenie onBlur porównywało bieżącą wartość z samą sobą i pomijało PATCH. Sprawdzenie przy utracie fokusu porównuje teraz z migawką zrobioną w momencie uzyskania fokusu.
Naprawiono zapisywanie identyfikatorów Telegram, GitHub i LinkedIn na stronie profilu: wpisanie formatu z placeholdera, jak t.me/username, było przycinane do śmieci w stylu t.me. Teraz dowolny wpis — sama nazwa, @nazwa, t.me/nazwa lub https://t.me/nazwa — jest normalizowany do czystej nazwy użytkownika.
- Pola Telegram, GitHub i LinkedIn na stronie profilu zapisują się teraz poprawnie, gdy adres jest wpisany bez
https://. Wcześniejt.me/durovbył zapisywany jakot.me, agithub.com/octocatjakogithub.com, ponieważ normalizator wymagał schematuhttp(s)://, a w przeciwnym razie przycinał wartość przy pierwszym ukośniku.
Usunięto fałszywie pozytywny baner promocji premium w panelu wyniku rozwiązania: wyświetlał się przy darmowych zadaniach, a nawet użytkownikom premium. Od początku był to martwy element UI — zadania premium są blokowane przy otwieraniu zadania, więc edytor nigdy ich nie widzi.
- W oknie świętowania „Poprawnie!” pigułka „+50% Power za rozwiązanie — przejdź na Premium” ma teraz właściwy odstęp poziomy — korona i strzałka nie dotykają już krawędzi pigułki.
- AI Mentor otrzymuje teraz zwarty kontekst zadania: aktywny dialekt SQL, tabele, relacje, oczekiwane kolumny, przykładowy wynik oraz najnowszy diff oceny. Wzorcowy SQL jest używany wyłącznie jako prywatny kontekst do wyjaśniania błędów i późniejszych poziomów podpowiedzi.
- Baner promocyjny „Zadania rekrutacyjne — Premium” zniknął z panelu informacji zwrotnej. Wcześniej dowolny błąd po stronie serwera zawierający słowo
premiumw śladzie stosu (np. brakująca kolumnasolved_as_premiumtuż po migracji) wywoływał dopasowanie podciągu i renderował promocję — nawet przy darmowych zadaniach i nawet użytkownikom premium.
Premium przyznaje teraz +50% Power za każde rozwiązane zadanie — premia przykleja się do zadania na zawsze, nawet po wygaśnięciu subskrypcji. AI Mentor nie zrzuca już rozwiązania przy pierwszej podpowiedzi i eskaluje pomoc osobno dla każdego zadania. Usunięto też startowy komentarz -- Click ▶ Run z edytora pierwszego zadania.
- Subskrypcja Premium przyznaje mnożnik ×1,5 Power za każde rozwiązane zadanie. Premia jest blokowana w momencie rozwiązania, więc pozostaje w Twoim łącznym wyniku, nawet jeśli subskrypcja później wygaśnie.
- Okno świętowania „Poprawnie!” pokazuje teraz darmowym użytkownikom zachętę do ulepszenia tuż pod chipem +Power: „Zdobądź +50% Power za rozwiązanie — przejdź na Premium”, z linkiem do /pricing.
- AI Mentor eskaluje teraz podpowiedzi w obrębie zadania. Pierwsze żądanie otrzymuje wyłącznie wskazanie kierunku, bez nazw operatorów; żądania 2–4 dodają koncepcję i kategorię; od żądania 5 mentor może bezpośrednio wymienić
LIKE/WHERE/GROUP BY. Licznik resetuje się co 24 godziny. - Wyjaśnienia błędnej odpowiedzi przestrzegają teraz tych samych poziomów co zwykłe podpowiedzi — nie zdradzają już konkretnych operatorów przy pierwszym nieudanym wysłaniu.
- Zamknięto pozostałe ustalenia z audytu zadań SQL: poprawiono wzorzec w „Zwycięzcach turnieju”, wyrównano podglądy TIMESTAMP w kilku zadaniach i przywrócono wariant PostgreSQL dla jednego zadania AI.
- Usunięto startowy komentarz
-- Click ▶ Run — see what's in this tablez edytora pierwszego zadania. Otwierane zadania zaczynają się teraz od pustego edytora.
Przebudowano filtry katalogu zadań: status stał się 3-stanowym przełącznikiem segmentowym (Wszystkie / Nierozwiązane / Rozwiązane) z domyślną wartością Nierozwiązane, dodano filtr dialektu, chipy tematów i firm pokazują teraz bieżącą liczbę zadań, aktywne filtry pojawiają się jako usuwalne pigułki z opcją „Resetuj wszystko”.
- Filtr dialektu w katalogu: All / PG / MySQL — własny segment obok kontrolki statusu.
- Chipy tematów i firm pokazują teraz, ile zadań pasuje: „Windows (43)”, „Tinkoff (5)”. Chipy z zerową liczbą zadań blakną.
- Wiersz pigułek aktywnych filtrów: każdy zastosowany filtr (wyszukiwanie, trudność, status, dialekt, ulubione, temat, tag, firma, region) renderuje się jako usuwalna pigułka; „Resetuj wszystko” przywraca wszystko do wartości domyślnych.
- Filtr statusu zadania jest teraz 3-stanowym przełącznikiem segmentowym (Wszystkie / Nierozwiązane / Rozwiązane), domyślnie ustawionym na Nierozwiązane. Zastępuje pojedynczy przełącznik „Ukryj rozwiązane”.
- Kontrolkę sortowania przeniesiono na górny pasek — wcześniej była ukryta na dole i schowana za przewijaniem.
- Przełącznik ulubionych przeniesiono na górny pasek filtrów — teraz obok innych binarnych przełączników.
- Plakietka filtrów nie pokazuje już „1” od razu po otwarciu — domyślny widok „Nierozwiązane” nie jest liczony jako zastosowany filtr.
Audyt całego katalogu: oceniarka nie odrzuca już poprawnych odpowiedzi z powodu serializacji DATE vs TIMESTAMP, podglądy próbek w ponad 60 zadaniach są teraz zgodne z tym, co faktycznie zwraca rozwiązanie wzorcowe, a 5 zadań używających CURRENT_DATE / NOW() przypięto do stałego punktu odniesienia, żeby podglądy nie dryfowały z dnia na dzień. Plus poprawka opisu w zadaniu o transakcjach miesięcznych ze zgłoszenia użytkownika.
- Oceniarka: dodano normalizację daty jako znacznika czasu (
2024-01-01T00:00:00.000Z↔2024-01-01) — poprawne odpowiedzi przestają dostawać „liczba wierszy się zgadza, zawartość się różni” z powodu formatowania typu zwracanego. - Zadanie „Miesięczne transakcje i obciążenia zwrotne”: opis wyjaśnia teraz, że obciążenie zwrotne należy do miesiąca pierwotnej transakcji, a nie do daty zwrotu; podgląd pokazuje daty pierwszego dnia miesiąca zamiast przesuniętych przez strefę czasową znaczników ISO.
- Zregenerowano podglądy próbek w ponad 60 zadaniach: formatowanie liczb (
100→100.00), wyświetlanie strefy czasowej (+03→+00), DATE jako TIMESTAMP, INTERVAL jako obiekt — podgląd jest teraz zgodny z tym, co zwraca działający wykonawca. - Pięć zadań używających
CURRENT_DATE/NOW()/CURRENT_TIMESTAMPw seedzie (#170, #601, #602, #668, #693) przypięto teraz do2026-05-05 12:00:00 UTC. Podglądy przestają dryfować.
Przerobiono blog: wyszukiwanie, nawigacja po 10 sekcjach, pierwszych 7 tutoriali dla początkujących. Nazwy poleceń w ściągawce w zadaniu są teraz klikalnymi linkami do artykułów. Strona wydań otrzymała drzewo wersji ze śledzeniem przewijania.
- Blog: wyszukiwanie po tytułach, treści i tagach + lewy pasek boczny z sekcjami. Aktywna sekcja podświetla się przy przewijaniu.
- Blog: 7 pierwszych tutoriali dla początkujących —
SELECT … FROM,WHERE,ORDER BY,LIMIT,INNER JOIN,LEFT JOIN, aliasy. - Ściągawka tematyczna w zadaniu: nazwy poleceń są teraz niebieskimi linkami do odpowiedniego tutorialu na blogu — otwierają się w nowej karcie.
- Strona wydań: drzewo wersji po lewej stronie pogrupowane według
major.minor; kliknięcie przewija do wersji i aktualizuje kotwicę w adresie. - Przycisk „Kopiuj SQL” w każdym wierszu zakładki Wysłane.
- Poprawna odmiana liczebników w języku rosyjskim wszędzie: „221 задача”, „2 задачи”, „5 задач” zamiast dawnego „221 задач”.
- Ściągawka tematyczna w zadaniu nie drga już po rozwinięciu — ścieżka paska przewijania jest teraz zarezerwowana.
- Tabele Markdown w artykułach blogowych renderują się teraz jako tabele HTML, a nie jako pojedyncza linia zwykłego tekstu.
Przegląd jakości całego katalogu: naprawiono 23 nierozwiązywalne zadania, przepisano 66 angielskich opisów, wyrównano opisy i podglądy próbek w kilkudziesięciu kolejnych. Plus jedna poprawka zgłoszona przez użytkownika.
- Podglądy próbek w ponad 50 zadaniach są teraz zgodne z tym, co zwraca rozwiązanie wzorcowe.
- Połączono zduplikowane tagi firm w chipach filtra zadań.
- Naprawiono 23 zadania (pharma-*, loyal-*, hotel-*, qa-*), których nie dało się rozwiązać z powodu niezgodności schematu i seeda.
- Przepisano angielskie opisy 66 zadań lc-* / lc2-*, które wcześniej zawierały zaślepkę lub fragment.
- Zadanie „Pokoje zarezerwowane 2 września 2019” nie przyjmuje już błędnej odpowiedzi.
- Dziesięć zadań, w których opis nie zgadzał się z rozwiązaniem wzorcowym, jest teraz spójnych.
- Siedem zadań Tochka miało treść z zupełnie innego zadania — przepisano je.
69 nowych zadań zaczerpniętych z prawdziwych rozmów rekrutacyjnych na rynku rosyjskim (Yandex, Tinkoff, Sber, VTB, Alfa, VK, Ozon, Avito, Magnit, Samokat i 23 inne firmy) — zbudowanych wokół szerszego świata typów PostgreSQL: UUID, JSONB, ENUM, INTERVAL, TSTZRANGE, INET, NUMERIC i POINT. Plus kluczowe poprawki ze zgłoszeń użytkowników i czerwona kropka „Co nowego” na pasku bocznym.
- 69 nowych zadań zaczerpniętych z prawdziwych rozmów rekrutacyjnych w rosyjskich firmach. 33 pracodawców: Yandex, Tinkoff / T-Bank, Sber / SberMarket, VTB, Alfa-Bank, Gazprombank, Rosbank, Sovcombank, MTS / MTS Bank, Otkritie, Renaissance Bank, Megafon, VK, Ozon, Avito, Magnit, Lenta, Wildberries, Cian, ivi, Delimobil, Aviasales, Samokat, Domclick, Lesta, Skypro, Uchi.ru, Sravni.ru, Vizor, CloudReports i Yandex Practicum. Wszystkie oznaczone tagiem Interview, dostępne dla Premium.
- Bogate typy PostgreSQL w schematach zadań. Większość zadań używała dotąd
INT+VARCHAR(100)— w sam raz na podręcznikowe przykłady, daleko od produkcji. Nowe zadania wprowadzająUUIDdla kluczy głównych klientów i zamówień,NUMERIC(15,2)dla pieniędzy iNUMERIC(12,4)dla kursów walut,TIMESTAMPTZdla zdarzeń,INTERVALdla czasu trwania połączeń i sesji,TSTZRANGE/DATERANGE/NUMRANGEdla historii SCD2 i okien ważności,JSONBdla metadanych i ładunków zdarzeń,ENUM(z jawnymCREATE TYPE) dla statusów i kategorii,INETdla adresów IP w zadaniach antyfraudowych,POINTdla współrzędnych GPS,TEXT[]/INTEGER[]dla tagów i tablic identyfikatorów. Dzięki temu trenażer pokazuje te same typy, które spotkasz na produkcji. - Czerwona kropka przy pozycji „Co nowego” na pasku bocznym — pojawia się, gdy ukazało się nowe wydanie, którego jeszcze nie otworzyłeś. Kropka znika po jednej wizycie na
/releases(flaga przechowywana w localStorage tej przeglądarki). Wcześniej wskaźnik istniał tylko na górnym pasku nawigacji; w układach z samym paskiem bocznym był nieosiągalny.
- Poprawne renderowanie nowych typów w tabeli wyniku zapytania. Wcześniej kolumny
JSONB,INTERVALiPOINTrenderowały się jako „[object Object]”, a tablice (TEXT[],INTEGER[]) zwijały się do ciągów połączonych przecinkami — struktura była niewidoczna. Teraz JSONB i tablice renderują się jako czytelny JSON, INTERVAL jako1d 02:30:00, POINT jako(x, y). Wartości logiczne i UUID zachowują renderowanie tekstowe. - Diagramy ER na stronie zadania otrzymały wpisy palety dla nowych typów: UUID fioletowy, JSONB żółty, INTERVAL purpurowy (ta sama rodzina co inne typy daty/czasu), TSTZRANGE / DATERANGE / NUMRANGE różowy, INET cyjanowy, POINT różowy, niestandardowe ENUM różany. Wcześniej te typy trafiały do domyślnej szarości i były nie do odróżnienia od zwykłych INT / VARCHAR.
- Sześć poprawionych wyżej zadań otrzymało też wzbogacony schemat w tym samym stylu co nowy zestaw rekrutacyjny: klucze główne
UUID, ładunkiJSONB, typyENUMdla płci / kategorii / statusów,NUMERIC(15,2)zamiastINTdla pensji i cen,INTERVALdla czasów trwania. Treść zadań nieco dostosowano, aby uzasadnić nowe typy, ale podstawowy problem pozostaje bez zmian. To pierwszy krok w modernizacji starszych zadań — więcej w kolejnych wydaniach.
- Naprawiono kilka starszych zadań zgłoszonych przez użytkowników. „Project Employees II” — diagram ER pokazywał Employee + Department zamiast Project + Employee, choć schemat bazowy był poprawny; doprowadzono diagram do zgodności. „Reported Posts” — opis nie wyjaśniał, że powód zgłoszenia znajduje się w kolumnie
extra: teraz to wyjaśnia. „Sales Analysis I” — rozwiązanie wzorcowe używałoSUM(price), mimo że schemat ma kolumnęquantity, co było mylące; przeformułowano jakoSUM(quantity * price), bliżej rzeczywistego przychodu. „Swap Salary” — zadanie było podłączone do złego zestawu danych (Employee + Department zamiastSalary(id, name, sex, salary)), przez co było nierozwiązywalne; podłączono ponownie do kanonicznego zestawu danych. Ten sam cichy dryf ER w „Project Employees III” i „Reported Posts II” dostał tę samą poprawkę.
Duże wydanie: nowa nawigacja z lewym paskiem bocznym, rygorystyczny tryb Mock Interview z premią +25% Power, profile publiczne i znajomi, powiadomienia e-mail, tagi firm w kolorach marki, dodatkowe filtry i blok kursów partnerskich. Plus ważna poprawka prywatności między kontami i dziesiątki dopracowań UX.
- Blok kursów partnerskich. Na stronie zadań (szerokie ekrany) prawa kolumna pokazuje wyselekcjonowany zestaw kursów partnerskich; na urządzeniach mobilnych to poziomy karuzela nad listą. Karty linkują do stron docelowych partnerów z tagami UTM — dla nas to sposób na utrzymanie niskiej ceny subskrypcji przez pokrycie kosztów infrastruktury.
- Nowy tryb Mock Interview — rygorystyczna symulacja prawdziwej rozmowy rekrutacyjnej. Każde pojedyncze naruszenie (przełączenie karty, wklejenie, wyjście z trybu pełnoekranowego, utrata fokusu okna > 1 sekundy) automatycznie kończy sesję niepowodzeniem. Podpowiedzi, AI Mentor i ściągawka są ukryte i zablokowane. Czasy trwania: 5 / 10 / 15 / 30 / 60 minut. Wersja darmowa — 1 podejście dziennie; Premium — bez limitu. W trakcie aktywnej sesji otaczająca nawigacja (pasek boczny, „Zadania”, „Najlepsze rozwiązania”, „Następne zadanie”, „Opuść ścieżkę”, Prev/Next/Random) jest zablokowana — jedynym wyjściem jest jawny przycisk „Zakończ” lub zamknięcie karty (które automatycznie porzuca sesję).
- +25% Power za każde zadanie zaliczone w trybie Mock Interview — premia jest naliczana per zadanie i oznaczona w raporcie po sesji. Ranking ma teraz informacyjną kolumnę „Mock” (ta sama liczba widoczna na karcie profilu i na
/u/<username>); nie wpływa na kolejność sortowania według Power. - Profile publiczne pod
/u/<username>: wybierz krótki identyfikator i włącz przełącznik publiczny — każdy anonimowy odwiedzający zobaczy Twoją rangę, Power, bieżącą serię, liczbę osiągnięć, mapę cieplną aktywności oraz linki do GitHub / Telegram / LinkedIn. Żadne prywatne dane nie są ujawniane. - Znajomi: dodawaj użytkowników po ich publicznym identyfikatorze, zarządzaj przychodzącymi i wychodzącymi zaproszeniami, oglądaj dedykowaną zakładkę rankingu znajomych z ich Power, serią i liczbą rozwiązanych zadań.
- Ulubione: każda karta zadania ma teraz gwiazdkę — kliknij ją, a zadanie trafi do filtra „Tylko ulubione”. Lista przechowywana jest na serwerze, powiązana z Twoim kontem, i przetrwa zmianę przeglądarki.
- Powiadomienia e-mail (przełączniki w profilu). „Zachowaj swoją serię” — wieczorne przypomnienie, gdy Twoja seria wynosi ≥ 3 dni, a dziś nic nie rozwiązałeś. „Tygodniowy przegląd” — sobotnie poranne podsumowanie z zadaniami rozwiązanymi w ostatnim tygodniu, bieżącą serią i najsłabszą kategorią.
- Użytkownicy Premium są wizualnie oznaczeni wszędzie, gdzie pojawiają się awatary: holograficzny gradientowy pierścień (ranking, znajomi, profil, pasek boczny, publiczna strona
/u/<username>); mała plakietka korony w rogu na dużych awatarach. Nie wpływa na kolejność sortowania. - Tagi firm w kolorach marki na kartach zadań: żółty dla Yandex / Tinkoff / Beeline, zielony dla Sberbank / Spotify / OpenAI, niebieski dla VK / Ozon / Google / Meta, czerwony dla MTS / Alfa / Tesla, fioletowy dla Stripe / Skypro / Wayfair, pomarańczowy dla Amazon / Alibaba i tak dalej. Wcześniej każdy tag był w jednym fioletowym kolorze.
- Dodatkowe chipy klauzul SQL w filtrze „Temat” na stronie zadań: obok 8 szerokich kategorii (SELECT, JOIN, podzapytania, funkcje okna, agregaty, CTE, DML, DDL) możesz teraz przełączać
GROUP BY,COUNT,HAVING. Mieszaj je z kategoriami dla precyzyjniejszego filtrowania. - Panel „Schemat bazy” na stronie zadania można teraz zwinąć. Przełącznik obok tytułu zadania ukrywa kolumnę i zwalnia szerokość dla edytora i tabeli wyników. Stan zwinięcia jest zapamiętywany dla każdej przeglądarki, więc schemat otwiera się tak samo przy następnym zadaniu.
- 8 nowych zadań rekrutacyjnych od Tochka — od EASY po HARD. Scenariusze CRM (znajdź klientów z aktywnym wnioskiem), obliczenia portfelowe (struktura, średnioważony czas do wykupu, dynamika wartości), zapytania o obligacje z funkcjami okna. Rozwiązania dla PostgreSQL i MySQL.
- Sekcja bloga pod
/blog. Obszerne tutoriale — startujemy z dogłębną analizą funkcji okna. Treść dwujęzyczna, adresy URL ze slugiem, karty OG do udostępniania w mediach społecznościowych. Dostępna ze stopki i z dołu paska bocznego. - Niestandardowa strona 404. Stary domyślny widok Next.js renderował czarny tekst na białym tle — niewidoczny w trybie ciemnym. Nowa strona używa tokenów motywu i mieści się we wspólnym szkielecie, dzięki czemu nawigacja jest w zasięgu.
- Przeprojektowana nawigacja. Dla zalogowanych użytkowników wewnątrz aplikacji główna nawigacja przeniosła się na lewy pasek boczny — Trener, Postępy, Ranking i pozostałe sekcje są tam, z Power + serią pod awatarem oraz przełącznikami języka/motywu na dole. Strona startowa, cennik i procesy logowania zachowują smukły górny pasek. Strony narzędziowe (Co nowego / Zgłoś błąd / Blog) dziedziczą interfejs z miejsca, z którego przyszedłeś.
- Gradientowy pierścień Premium wokół awatarów pokazuje się teraz na każdej karcie rankingu — wcześniej pierścień pojawiał się tylko na karcie „Cały czas” i po cichu znikał na „Tydzień” i „Miesiąc”, ponieważ backend nie wysyłał flagi subskrypcji dla rankingów okresowych.
- Zmiany imienia i awatara w Twoim profilu odzwierciedlają się teraz natychmiast na pasku bocznym — bez przeładowania strony. Wcześniej stara karta użytkownika mogła utrzymywać się aż do pełnego odświeżenia.
- Wycieki danych między kontami przy zmianie użytkowników w tej samej przeglądarce. Wcześniej po wylogowaniu / zalogowaniu na inne konto mogły się utrzymywać: wątki czatu z AI Mentorem, robocze wersje SQL w edytorze, flagi „rozwiązane” dla poszczególnych zadań, aktywne sesje Mock Interview, licznik generowania AI, pamięć podręczna ulubionych. Teraz wylogowanie i każda ścieżka logowania (formularz, OAuth, weryfikacja e-mail) wymazuje wszystko powiązane z poprzednim użytkownikiem.
- Link „Ranking znajomych” z profilu prowadzi teraz bezpośrednio na zakładkę Znajomi — wcześniej wyrzucał na globalny ranking. Pas dla początkujących „Zacznij tutaj” nie wraca już po tym, jak go zamkniesz; wcześniej zamknięcie resetowało się przy każdym wylogowaniu / zalogowaniu.
- Dziesiątki dopracowań układu i interakcji mobilnych: bardziej kompaktowe okno raportu po sesji, poprawne odstępy filtrów na wąskich ekranach, baner informacji zwrotnej nie nachodzi już na panel boczny przy 1024px, pola imienia + e-maila na stronie zgłaszania błędu dla anonimowych zgłaszających.
Hotfix UX edytora na wąskich ekranach: wyskakujące okno „Ustawienia edytora” nie jest już przycinane przez panel kodu i nie wychodzi poza krawędź widoku na urządzeniach mobilnych. Ten sam przycisk koła zębatego, który ma wersja desktopowa, jest teraz także na mobilnym pasku narzędzi, a ustawienie rozmiaru czcionki w końcu działa w edytorze mobilnym.
- Wyskakujące okno „Ustawienia edytora” mogło być przycinane przez krawędzie strony i nie miało wewnętrznego przewijania — na wąskim laptopie czy telefonie połowa ustawień była po prostu niewidoczna. Okno renderuje się teraz na wierzchu całej strony (przez portal), automatycznie dopasowuje się do widocznego obszaru i otrzymuje wewnętrzny pasek przewijania, gdy zawartość przekracza wysokość widoku. Nagłówek z tytułem i przyciskiem zamykania pozostaje przyklejony podczas przewijania.
- W widoku edytora mobilnego (≤1024px) na pasku narzędzi brakowało koła zębatego ustawień edytora — „Rozmiar czcionki” był dostępny tylko z desktopu. Koło zębate znajduje się teraz obok PG/MySQL i Format, a ustawienie rozmiaru czcionki faktycznie skaluje pole edytora mobilnego.
Hotfix ze zgłoszenia błędu: zadanie #240 („Premie pracowników”) renderowało zły schemat — pokazywało Employee + Department zamiast prawdziwego Employee + Bonus, przez co treść była nieczytelna.
- Zadanie #240 „Premie pracowników”: przeglądarka schematu renderowała nieaktualne tabele
Employee + Department(z polamidepartment_id,manager_id) i pustą zakładkęDepartment. Piaskownica i rozwiązanie wzorcowe przez cały czas były poprawne — błędne były tylko metadane przeglądarki. Teraz schemat pokazuje prawdziwe tabeleEmployee + Bonusz relacjąBonus.empId → Employee.empId.
Wzbogacono zestawy danych w 268 z 339 zadań — pełniejsze tabele źródłowe, więcej wartościowych wierszy w oczekiwanym wyniku, zadania nie sprawiają już wrażenia zepsutych.
- Masowe wzbogacenie zestawów danych: 268 z 339 zadań otrzymało pełniejsze dane seed — zazwyczaj 6–12 wierszy w głównych tabelach zamiast 2–4, ze zróżnicowaniem wzdłuż osi filtr/JOIN/GROUP BY, które wykorzystuje rozwiązanie wzorcowe. Dotknięto 137 unikalnych zestawów danych. Rozwiązania wzorcowe i schematy pozostają bez zmian. Postępy użytkowników są zachowane — już rozwiązane zadania pozostają rozwiązane, Power i osiągnięcia nie są przeliczane.
- Każde wzbogacone zadanie zostało zweryfikowane: rozwiązanie wzorcowe uruchomiono na nowym seedzie przez wykonawcę, a sample_output zregenerowano z rzeczywistego wyniku.
- Zadanie #38 (
well-paid-employees) — pierwotnie hotfix v1.2.4, teraz część szerszego przeglądu.
Hotfix ze zgłoszenia błędu: panel „Przykład oczekiwanego wyniku” wyjaśnia teraz, że liczba wierszy w nim nie musi się zgadzać z tabelami schematu.
- Dodano zastrzeżenie nad panelem „Przykład oczekiwanego wyniku”: „tak wygląda poprawna odpowiedź — ma własną liczbę wierszy, nie musi się ona zgadzać z tabelami schematu”. Wcześniej użytkownicy liczyli wiersze w jednej z tabel schematu i zakładali, że zadanie jest zepsute, gdy liczby się różniły.
Hotfix ze zgłoszenia błędu: zadanie #38 „Pensja wyższa niż przełożonego” działa teraz na właściwym zestawie danych z trzema rzeczywistymi przypadkami. Plus mała pomarańczowa kropka na „Co nowego?”, gdy ukaże się świeże wydanie.
- Mała pomarańczowa kropka pojawia się na pozycji nawigacji „Co nowego?”, gdy ukaże się świeże wydanie. Jedna wizyta na
/releasesusuwa ją do następnego wydania.
- Zadanie #38 (
well-paid-employees): zestaw danych był zbyt ubogi — 6 pracowników i jeden przypadek „podwładny zarabia więcej niż przełożony”, przez co wyglądało, jakby dane były błędne. Rozszerzono do 9 pracowników w dwóch działach z trzema wyraźnymi przypadkami (Eve > Alice, Frank > Dave, Henry > Bob).
Nowa strona „Zgłoś błąd” z załącznikami w postaci zrzutów ekranu, drugorzędna grupa nawigacji oraz bardziej kompaktowy pas „Zacznij tutaj” na urządzeniach mobilnych.
- Nowa strona „Zgłoś błąd” w nawigacji: formularz tematu + opisu z maksymalnie 5 zrzutami ekranu / krótkimi klipami (obsługa przeciągnij i upuść). Zgłoszenia trafiają do naszej skrzynki do szybkiej selekcji.
- Nawigacja otrzymuje drugorzędną grupę — „Co nowego?” i „Zgłoś błąd” — oddzieloną od głównych zakładek cienką pionową linią.
- Pas dla początkujących „Zacznij tutaj” jest bardziej kompaktowy na urządzeniach mobilnych — krótszy tytuł, ukryty opis, węższe karty. Zwalnia miejsce na samą listę zadań.
- Pas dla początkujących „Zacznij tutaj” nie miga już przez ułamek sekundy przy otwieraniu strony zadań — renderuje się teraz dopiero po rozwiązaniu
/progress. - Wyróżnik notatek o wydaniu (górny jednowierszowy nagłówek) renderuje teraz poprawnie odwrócone apostrofy — wcześniej pokazywał dosłowne „
?lang=” zamiast stylizowanej pigułki kodu. - Zniknął fantomowy pionowy pasek przewijania na stronie „Ścieżki nauki” —
min-h-screenw parze z paskiem nawigacji wymuszał ok. 60px dodatkowej wysokości nawet wtedy, gdy treść się mieściła.
Dopracowanie UX w całym trenażerze plus parametr URL ?lang= dla reklam i bezpośrednich linków do konkretnego języka.
- Otwórz konkretny język przez
?lang=enlub?lang=ruw adresie URL:https://sql.coderang.dev/?lang=en. Przydatne dla reklam i udostępniania linków do konkretnej lokalizacji; wybór jest zapamiętywany na rok.
- Gdy dzienne podpowiedzi AI się skończą, przycisk „Wyjaśnij” zamienia się w „Ściągawka” i otwiera odniesienie tematyczne.
- Gwiazdka ulubionych jest teraz widoczna na urządzeniach mobilnych i ledwie widoczna na desktopie, zamiast być ukryta do najechania.
- Opis zadania nie skacze już przy rozwijaniu ściągawki. Gwiazdka jest jaśniejsza po najechaniu.
- W zadaniach DDL panel schematu pokazuje „brak tabel początkowych; utwórz je” zamiast pustego płótna.
- Przycisk AI faktycznie pulsuje teraz tylko przy błędach (wcześniej klasa animacji nigdy nie była zdefiniowana).
- Power i Streak na pasku nawigacji wczytują się z localStorage przed pobraniem z serwera — koniec z miganiem „0 ⚡”.
- Licznik generowania AI nie resetuje się już do 0 po przekierowaniu na wygenerowane zadanie.
- Drobiazgi mobilne: jednakowej szerokości plakietki trudności (gwiazdka wyrównana), tekst dolnej zakładki się mieści, animacja skali dziennego licznika, podpowiedź ikony serii, rosyjskie reguły odmiany liczebników.
- Rosyjskie nazwy firm (Сбербанк, Яндекс, Авито…) renderują się teraz w transliteracji łacińskiej (Sberbank, Yandex, Avito) w angielskim interfejsie; cyrylica pozostaje w rosyjskim.
- Nazwy wpisów ściągawki (Aliasy, Podzapytanie skalarne itd.) tłumaczą się teraz poprawnie przy zmianie języka.
- Ranking tygodniowy/miesięczny stosuje teraz bonus za pierwsze podejście ×2 i ignoruje ponowne wysłania, zgodnie ze sposobem obliczania łącznego Power. Wcześniej widok okresowy pokazywał mniej więcej połowę łącznego — błąd w obliczeniach, nie w danych.
- Usunięto martwą zakładkę Solutions — żaden przycisk jej nie aktywował, ale duplikowała obciążenie.
- Odwrócone apostrofy nie zostawiają już odstępu przed końcowym znakiem interpunkcyjnym („
Action.”). - Stany puste panelu wyników tłumaczą się teraz poprawnie na angielski.
Dopracowanie zadań na modyfikację danych i ogólne renderowanie opisów.
- Wskazówka dla zadań DDL/DML: zadania UPDATE/INSERT/DELETE oraz CREATE/ALTER/DROP pokazują teraz krótką adnotację „końcowy SELECT nie jest potrzebny” — koniec ze zgadywaniem, co wypisać.
- Ściągawka tematyczna uwzględnia teraz typ zadania: w zadaniach DML nie pokazuje już SELECT/ORDER BY/LIMIT, w zadaniach DDL pokazuje tylko polecenia modyfikujące schemat.
- Tokeny w odwróconych apostrofach w opisach zadań (\
id = 4\, \users.email\) renderują się teraz jako akcentowane pigułki kodu zamiast surowego tekstu — opisy czyta się dokładnie tak, jak autorzy je napisali. - Bloki kodu w ściągawce mają teraz akcentowy lewy pasek i subtelne obramowanie — czyta się je jak prawdziwe fragmenty kodu, a nie szare plamy.
Wprowadzenie dla nowicjuszy: pas „Zacznij tutaj”, startowy SQL w pierwszym zadaniu oraz ściągawka tematyczna w każdym zadaniu. Podpowiedzi przy błędnej odpowiedzi są teraz konkretne i nie zużywają Twojego limitu AI.
- Pas „Zacznij tutaj” na górze strony zadań — 8 prostych zadań SELECT dla początkujących. Pojawia się, dopóki czegoś nie rozwiążesz; przewijanie przeciąganiem z kursorem chwytania.
- Startowy SQL w edytorze. Pierwsze otwarte zadanie wypełnia wstępnie
SELECT * FROM <first_table> LIMIT 5;, więc możesz od razu nacisnąć ▶ i zobaczyć, jak wyglądają dane. - Ściągawka tematyczna. Panel zadania ma teraz zwijany blok odniesienia z istotnymi poleceniami SQL, składnią i jednowierszowym wyjaśnieniem — dostosowany do tematu: SELECT, JOIN, agregaty, podzapytania, funkcje okna, CTE, DML, DDL.
- Baner błędnej odpowiedzi jest teraz konkretny: wymienia nadmiarowe/brakujące kolumny, różnice wierszy, problemy z sortowaniem i typowe błędy SQL. Działa lokalnie, bez zużywania limitu AI.
Autouzupełnianie świadome aliasów w edytorze SQL oraz poważne ulepszenia układu mobilnego.
- Strona wydań: historia aktualizacji jest teraz widoczna na /releases.
- Autouzupełnianie świadome aliasów. Po
<alias>.podpowiedzi są ograniczone do kolumn tej jednej tabeli. Same aliasy uzupełniają się po Tab. .jest teraz znakiem wyzwalającym: podpowiedzi pojawiają się automatycznie po nim, bez potrzeby Ctrl+Space.
- Menu mobilne nakłada się teraz na treść zamiast spychać stronę w dół. Zamyka się po dotknięciu poza nim.
- Przepisano 300+ opisów zadań: dodano kontekst biznesowy, wypisano kolumny wyjściowe, jawnie określono sortowanie i zaokrąglanie.
- Opis zadania na urządzeniach mobilnych przewija się teraz poprawnie przy długim tekście. Wcześniej zacinał się i blokował dostęp do zakładek na dole.
- Dolny pasek zakładek trenażera jest teraz zawsze widoczny w każdej przeglądarce mobilnej (Yandex Browser, MIUI, Samsung Internet). Wcześniej był przycinany poniżej widoku.
- Menu mobilne jest teraz w pełni nieprzezroczyste. Wcześniej 5% treści tła prześwitywało w przeglądarkach bez obsługi backdrop-filter.
- Na wąskich ekranach (320px i mniej) lista rozwijana sortowania zadań nie wychodzi już poza prawą krawędź.
- Stary błąd autouzupełniania: wpisanie
t.epoFROM employee twstawiałot.employee.salary(niepoprawny SQL). Alias jest teraz respektowany.
Pierwsze stabilne wydanie SQL Arena.
- 259 wyselekcjonowanych zadań SQL w 6 kategoriach: SELECT, JOIN, agregaty, podzapytania, funkcje okna, DML.
- 96 zadań rekrutacyjnych z czołowych firm technologicznych (Google, Meta, Amazon, Stripe itd.).
- Obsługa dwóch dialektów SQL — PostgreSQL i MySQL z natychmiastowym przełączaniem.
- Generowanie zadań przez AI: unikalne zadania dostosowane do Twojego poziomu umiejętności.
- AI Mentor: kontekstowe podpowiedzi bez zdradzania odpowiedzi.
- 3 ścieżki nauki: ustrukturyzowane drogi od podstaw po zaawansowany SQL.
- Wykonywanie SQL w czasie rzeczywistym w izolowanym środowisku z ocenianiem wyniku (różnice kolumn/wierszy/kolejności).
- Uwierzytelnianie OAuth przez GitHub, Google, Yandex, plus rejestracja e-mail/hasło.
- Ranking oparty na XP (Power), profile użytkowników, osiągnięcia, motyw ciemny i jasny.
- Subskrypcja Premium z integracją YooKassa i ograniczaniem liczby żądań chroniącym przed botami.
- Interaktywne diagramy schematu ER, edytor Monaco z podświetlaniem i formatowaniem SQL.
- Interfejs dwujęzyczny: rosyjski i angielski.