Wat is er nieuw
Updategeschiedenis van SQL Arena. Nieuwste releases bovenaan.
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.
De interface spreekt nu elke EU-taal — 21 nieuwe talen.
- 21 EU-talen toegevoegd: Duits, Frans, Italiaans, Nederlands, Pools, Roemeens, Grieks, Tsjechisch, Hongaars, Zweeds, Deens, Fins, Slowaaks, Bulgaars, Kroatisch, Litouws, Sloveens, Lets, Estisch, Iers en Maltees. Kies er een in de taalschakelaar, of laat hem automatisch bepalen op basis van je land en browsertaal.
- De pagina “Bug melden” heet nu “Feedback” (op /feedback) met twee tabbladen: “Bug melden” en “Een verbetering voorstellen”. Verbetervoorstellen bereiken het team op dezelfde manier als bugmeldingen.
- In de profielinstellingen is nu de einddatum van het abonnement zichtbaar, en de tekst “eenmalige betaling” is verwijderd.
- Het uitklapmenu van de taalschakelaar is nu compacter.
- Profielen openen weer vanuit de ranglijst voor ingelogde gebruikers — privacy verbergt een profiel alleen voor anonieme bezoekers. De URL-naam van het profiel kan niet meer worden gewist, dus elk profiel blijft bereikbaar via een link.
- Betalen met een buitenlandse kaart (het Visa/MC-tabblad) op de Russische site wordt nu correct in USD berekend en via Paddle verwerkt, in plaats van YooKassa te openen met een bedrag in roebel.
Certificering: leg een examen onder tijdsdruk af en verdien een verifieerbaar niveaucertificaat.
- Certificeringsexamens: drie niveaus (Foundations / Practitioner / Expert), elk 8 opdrachten, een timer per opdracht, slaaggrens 7 van de 8. Elke poging krijgt zijn eigen dataset, dus antwoorden kunnen niet vooraf worden uit het hoofd geleerd.
- Een verifieerbaar certificaat met een QR-code die naar je openbare profiel verwijst; er verschijnt nu een certificatensectie op het profiel.
- Verwijder je account rechtstreeks vanuit de profielinstellingen.
- De profielinstellingen zijn opnieuw vormgegeven in een strakke stijl met secties; Premium-gebruikers krijgen een geanimeerde ring rond hun avatar.
- Beoordeling versterkt op 324 opdrachten: ze draait nu op een verborgen dataset, dus je kunt niet langer slagen door het zichtbare voorbeeld na te bootsen.
- Autoaanvulling in de editor stelt nu CTE-namen voor die via WITH zijn gedeclareerd wanneer je FROM/JOIN typt.
- AI Mentor ziet nu je fout en je huidige query, zelfs na Run — met een nieuwe knop "Leg mijn fout uit" kun je elke fout bespreken, inclusief syntaxfouten.
- Opdracht #91: beoordeling draait nu op een verborgen dataset — je kunt niet langer slagen door het zichtbare voorbeeld na te bootsen (bijv. via LIMIT of een hardgecodeerde lengte).
- Opdracht #13: de verklappende filterhint is uit de opgave verwijderd — je leidt de oplossing nu zelf af.
- De Skill Map dekt nu elke opdrachtcategorie (CTE, DDL, transacties en optimalisatie toegevoegd) en is groter en beter leesbaar.
- De "wat te verbeteren"-hint van de Skill Map wijst nu naar het onderwerp met de meeste onopgeloste opdrachten in plaats van een willekeurig onderwerp.
- De jaarlijkse activiteitsgrafiek toont weer volledige maandnamen in plaats van ze tot één letter af te knippen.
- Oplossingen die een tijdsinterval teruggeven (bijv. het verschil van twee tijden) geven bij het inleveren geen fout meer.
- Opdracht #88: data gecorrigeerd — vertrekken vanuit Parijs hebben nu verschillende duren in plaats van drie identieke rijen.
- Ongedaan maken (Ctrl+Z) in de editor houdt nu aparte geschiedenis per querytabblad bij.
- Opdracht #624: de opgave vermeldt nu dat de gemiddelde prijs op 2 decimalen moet worden afgerond.
- Suggesties in de SQL-editor worden niet meer gedupliceerd na het navigeren tussen opdrachten.
- Opdracht #621: clubs zonder leden verschijnen nu in het resultaat met nul omzet.
- Moeilijkheidsgraad van opdracht #831 gewijzigd van EXPERT naar MEDIUM.
SQL Arena is nu meertalig: Engels, Spaans en Portugees, elk met eigen pagina-URL's en automatische regiodetectie.
- Taalschakelaar: Russisch, Engels, Spaans (Spanje en Latijns-Amerika) en Portugees.
- Bij een eerste bezoek opent de site in de taal van je regio, en je keuze wordt onthouden.
- Elke taal heeft eigen pagina-URL's (/en, /es, /es-419, /pt-br) die veilig te delen zijn.
- Premium-afrekenen in je lokale valuta: RUB, USD, EUR of BRL, afhankelijk van de regio.
- De Engelse site wordt volledig ondersteund; Spaanse en Portugese vertalingen worden geleidelijk uitgerold.
Opdrachten voor tabelaanmaak accepteren elke geldige vorm, foutmeldingen zijn nu relevant, en één opdracht met een dubbelzinnig antwoord is gecorrigeerd.
- De opdracht "populairste cursuspaar": de voorbeelddata liet meerdere even geldige antwoorden toe, terwijl de beoordelaar er maar één accepteerde. De opdracht heeft nu één correct antwoord.
- CREATE TABLE-opdrachten wezen een correcte oplossing af wanneer de cursist een constraint een naam gaf (bijv.
CONSTRAINT ... PRIMARY KEY). De beoordeling vergelijkt nu de tabelstructuur — namen van constraints worden genegeerd. - Een mislukte opdracht voor tabelaanmaak toonde een irrelevante "voeg ORDER BY toe"-hint. De hint is nu ter zake — over kolommen, types, NOT NULL en sleutels.
Opdrachten voor datamutatie worden precies opgelost zoals de opgave aangeeft — geen ongedocumenteerde controlerende SELECT.
- INSERT/UPDATE/DELETE- en transactieopdrachten (inclusief UPSERT, MERGE, SKIP LOCKED) eisten niet langer een ongedocumenteerde controlerende SELECT. Ze worden nu beoordeeld op basis van de resulterende tabelstatus, en de opdrachtpagina toont een melding "geen afsluitende SELECT nodig".
- Topoplossingen: service-accounts verschijnen niet meer in de lijst — net als op het openbare scorebord.
Opdrachten voor tabel- en indexaanmaak worden nu precies opgelost zoals de opgave aangeeft — geen ongedocumenteerde SELECT; de live verversing van het scorebord werkt weer.
- DDL-opdrachten (CREATE TABLE, ALTER, CREATE INDEX, foreign keys) eisten niet langer een ongedocumenteerde controlerende SELECT. Ze worden nu beoordeeld op basis van het resulterende databaseschema, en de opdrachtpagina toont een melding "geen afsluitende SELECT nodig".
- Scorebordpagina: live verversing hersteld — de WebSocket-verbinding voor het scorebord valt niet meer weg.
- Schemadiagram: sommige opdrachten toonden geen verbindingen tussen tabellen — foreign-key-pijlen verschijnen nu in het diagram.
- Het dialoogvenster "Correct!" toont een rangdaling niet langer als een promotie omhoog — de rangbadge verschijnt alleen bij een echte promotie.
CREATE / ALTER TABLE-opdrachten en andere oplossingen met meerdere stappen kunnen weer worden ingeleverd — de limiet op het aantal statements per inzending was te streng.
- De limiet op het aantal statements per inzending is verhoogd van 3 naar 20: DDL-opdrachten (CREATE TABLE, ALTER, indexen, triggers) en DML met meerdere stappen worden niet meer afgewezen met een "te veel statements"-fout.
De MySQL-variant van de catalogusopdrachten is weer in sync met PostgreSQL — sommige MySQL-opdrachten werden tegen verouderde data beoordeeld.
- De MySQL-variant van honderden opdrachten draaide op een verouderde dataset — de seeds zijn opnieuw gesynchroniseerd, het MySQL-antwoord komt weer overeen met PostgreSQL.
- Zes opdrachten die alleen in PostgreSQL werkten, hebben nu een werkende MySQL-variant.
- CREATE TABLE / CREATE INDEX / ALTER-opdrachten worden beoordeeld op basis van het resulterende tabelschema — een verkeerde structuur wordt niet meer als correct geaccepteerd.
- INSERT-opdrachten met CURRENT_TIMESTAMP / NOW() wijzen een correct antwoord niet langer af vanwege een tijdsverschil bij uitvoering.
- Voorbeelduitvoer die per ongeluk het exacte antwoord prijsgaf, is vervangen door voorbeelden zonder spoilers; rijvolgorde wordt afgedwongen waar een opdracht dat vereist.
- Een catalogusbrede audit heeft de opgave, de beoordelingsdata en de referentieoplossing weer op één lijn gebracht in enkele tientallen opdrachten waar ze uit elkaar waren gegroeid.
Beoordeling van oplossingen met meerdere statements gecorrigeerd — een DELETE/UPDATE met een afsluitende SELECT wordt nu correct beoordeeld.
- Datums en tijden in queryresultaten worden nu netjes weergegeven als
2024-01-15 08:00:00in plaats van het technische ISO-formaat.
- DML-opdrachten (DELETE, UPDATE, INSERT) met een controlerende SELECT wijzen een correct antwoord niet meer af als "extra kolommen".
- Opdracht #768: de opgave komt nu overeen met het beoordeelde antwoord.
- De hint bij een fout antwoord stelt niet meer voor om te vergelijken met het voorbeeldblok, dat opzettelijk niet exact is.
- Pure UPDATE / DELETE / INSERT-opdrachten worden nu beoordeeld op basis van de resulterende tabelstatus — een verkeerde mutatie wordt niet meer als correct geaccepteerd.
Vijf opdrachten gecorrigeerd waar de opgavetekst niet overeenkwam met het schema en het antwoord.
- Opdrachten #762, #763, #764, #765, #809: opgave herschreven om overeen te komen met het werkelijke schema en het verwachte antwoord.
- AI-opdrachtgeneratie, AI Mentor en het bugmeldformulier: bij een rate-limit tonen ze nu "opnieuw proberen over N seconden" in plaats van "ThrottlerException".
Opdracht #17 gecorrigeerd — de beoordelaar gaf NULL terug door een schemafout.
- Opdracht #17 (
average-post-hiatus): schema afgestemd op de seed, de beoordelaar werkt weer.
Bij de opdracht "Verplaats oude rijen in één keer naar het archief — racevrij" (#789) vroeg de opgave om een kolom customer_id die niet in het schema bestaat. De formulering is nu afgestemd op het werkelijke schema en de beoordelaar: id, status, amount.
- Opdracht #789 (
hard-cte-atomic-archive): de beschrijving noemde een niet-bestaande kolomcustomer_id. De formulering komt nu overeen met het schemaorders/orders_archiveen de verwachte kolommenid, status, amount.
De melding "Te veel verzoeken" toont nu de exacte limiet en de seconden tot reset in plaats van de cryptische "ThrottlerException". De server-side rate-limit is verhoogd zodat snelle navigatie binnen een track niet meer tegen het plafond aanloopt.
- De server-side rate-limit op gewone API-verzoeken is 5× verhoogd. Snel heen en weer schakelen tussen opdrachten binnen een track (10+ parallelle fetches bij het mounten) loopt niet meer tegen het plafond aan met 429-fouten.
- Bij een rate-limit op Inleveren of Run toont de melding nu de werkelijke limiet en het exacte aantal seconden tot een nieuwe poging. Voorheen verscheen alleen de cryptische "ThrottlerException: Too Many Requests" zonder hint over de wachttijd.
"Start" op de trackkaart start de track nu echt weer — een onzichtbare overlay van de kaartlink ving de klik op en stuurde die naar de detailpagina van de track.
- Op
/trainer/tracksnavigeert de knop "Start" op een trackkaart niet langer naar de detailpagina in plaats van de track te starten. Klikken-overal-op-de-kaart → details blijft behouden.
SQL-sandbox: gebruik je eigen tabellen en queries — geen opdracht, geen beoordeling. Plus een uniforme brede bento-indeling voor scorebord, voortgang, tracks, opdrachten en sessies.
- Nieuwe pagina
/sandbox— Monaco-editor, schemapaneel, resultaatpaneel, datatabbladen per tabel, opwarmsnippets. Anonieme sessies verlopen na 30 min inactiviteit, ingelogde gebruikers krijgen 7 dagen. - Opgeslagen fiddles: tot 5 op gratis, onbeperkt op Premium. Bibliotheek met zoeken, link kopiëren, verwijderen en een privacyschakelaar.
- Uniforme brede indeling op alle persoonlijke pagina's — My Fiddles, Voortgang, Scorebord, Sessies, Opdrachten, Tracks en de trackdetailpagina delen nu één shell met een gradiënt-hero en een consistent kaartraster.
De pijlen voor positiewijziging op het scorebord zijn terug — voorheen was de kolom leeg omdat er geen referentiemoment was om mee te vergelijken.
- De indicator "gestegen / gedaald / geen verandering" staat weer naast elke rij op het scorebord. Het referentiemoment van de vorige week is geseed; de wekelijkse cron blijft het bijwerken.
Een bug opgelost waarbij het opnieuw inleveren van een al opgeloste opdracht stilletjes Power verwijderde — de "eerste poging"-bonus werd gewist. Voor alle getroffen gebruikers is de Power opnieuw berekend.
- Het opnieuw inleveren van een oplossing voor een al opgeloste opdracht wist de "eerste poging"-bonus niet meer — de Power voor die opdracht blijft hetzelfde als direct na de eerste geslaagde inzending.
- Opdracht #107 (uitgavenoverzicht per boekgenre voor 2005) vereist geen specifieke rijvolgorde meer — elke volgorde wordt nu geaccepteerd, in lijn met de formulering van de opgave.
Het DB-schemapaneel op verschillende opdrachten gecorrigeerd — de oranje relatielijnen tussen gekoppelde tabellen werden niet getekend.
- Bij sommige opdrachten toonde het paneel "Schema" de relaties tussen tabellen niet (de oranje 1:N-pijlen) — de ontbrekende relaties zijn aan de datasets toegevoegd.
De opdracht "Verdeel klanten in lage / middel / hoge besteders" gecorrigeerd: het voorbeeldantwoord en de referentieoplossing waren afgeweken van de opgave — nu gebruikt alles de klant-id en de segmenten low / mid / high.
- Opdracht "Verdeel klanten in lage / middel / hoge besteders" (#757): het voorbeeldantwoord en de referentieoplossing komen nu overeen met de opgave — kolommen
customer_id,segment, segmentenlow/mid/high, gesorteerd opcustomer_id.
Een grote "Arena"-rebranding: een nieuwe homepage, een vanaf nul opgebouwd scorebord met podium en live-updates, punten hernoemd naar "Power" met een strijdbijl als merkteken, opnieuw opgebouwde leertracks, en adaptieve AI-opdrachtgeneratie die je recente inzendingen daadwerkelijk leest.
- Een nieuw tabblad "League" — de 30 gebruikers die qua Power het dichtst bij je zitten. Moeilijkheidsfilters op het globale tabblad (Power per ladder herberekend). Pijlen omhoog / omlaag naast elke positie — beweging week op week.
- Prestaties: emoji vervangen door vectoriconen getint per categorie, browsertooltips tonen gelokaliseerde namen; op
/statsis het een raster met tap-popovers op mobiel. Nieuwe prestatie "10 Expert". - Beweeg over een naam op het scorebord voor een mini-gebruikerskaart. Een knop "Rang delen" — de link verwijst naar je openbare profiel met een OG-preview.
- Homepage herschreven onder het merk "Arena": een pakkende kop "Sharpen SQL. Take the offer.", een live scorebord in de hero, een rangladder met een "You"-pin, secties over de trainer / tracks / AI / interviewmodus / voortgang, en een afsluitende band "The axe is in your hand. Swing.". Geschikt voor mobiel.
- Punten hernoemd naar "Power". De bliksemschicht is vervangen door een strijdbijl — nu in het logo, de favicon en de previewweergave bij het delen van een link.
- De scorebordpagina is volledig opnieuw opgebouwd: een top 3-podium (goud / zilver / brons), een persoonlijke voortgangskaart met een balk naar de volgende rang, één vastgezette filterbalk, de rangladder direct onder de header, een vastgezette "jij"-rij wanneer je buiten de top 50 valt, en live-updates — de tabel reageert soepel op de oplossingen van anderen zonder herladen.
- Leertracks opnieuw opgebouwd. Analyst / Backend / QA / Data Engineering — elk ~50 zorgvuldig gekozen opdrachten: enkele vertegenwoordigers per onderwerp×moeilijkheid-cel, van opwarming tot EXPERT, met de nadruk op echte interviewvraagstukken. Een Data Engineering-track toegevoegd plus een aparte track voor interviewvoorbereiding.
- De knop "Genereer voor mij" is nu echt adaptief: hij leest je laatste 40 inzendingen, kiest het onderwerp met de slechtste recente nauwkeurigheid en stemt de moeilijkheid af op jouw niveau — stagneer je, dan zakt de volgende een trede; bij een reeks gaat hij omhoog.
- Nieuwe bezoekers landen standaard op het thema "Night" (voorheen "Evening"). Als je al een thema hebt gekozen, blijft je keuze behouden.
- Opdracht "Zeg het in één getal: hoeveel actieve klanten" — de canonieke oplossing vereiste klanten met ≥2 betaalde bestellingen, terwijl de beschrijving "minstens één keer" zegt. Gecorrigeerd om overeen te komen met de beschrijving.
EXPERT-opdrachten leveren nu een echte 75 power per oplossing op (tot 281 met bonussen) in plaats van de 10 van het EASY-niveau. De totale power van gebruikers die al een EXPERT hebben voltooid, is met terugwerkende kracht herberekend.
- De beloningstabel had geen rij voor EXPERT, dus de beoordelaar viel terug op een standaardwaarde van 10 en elke EXPERT-opdracht leverde evenveel op als een EASY-opdracht. De EXPERT-basis is nu 75 power, met dezelfde vermenigvuldigers daarbovenop (eerste poging ×2, geslaagde Mock-Interview ×1,25, premium-oplossing ×1,5) — tot 281 power per EXPERT-opdracht. Een migratie heeft
xp_totalvoor elk profiel opnieuw doorgerekend volgens de gecorrigeerde regels, zodat iedereen die al een EXPERT had opgelost de ontbrekende power automatisch ontvangt.
De maas in de wet gedicht waarbij een opdracht kon worden "opgelost" door de voorbeelduitvoer hard te coderen: op 25 datasets controleert de beoordelaar je query nu tegen verborgen rijen die afwijken van die in de opdrachtbeschrijving.
- Oplossingen draaien nog steeds tegen dezelfde tabellen en kolommen als voorheen, maar de rijen in de beoordelingsseed verschillen van het zichtbare voorbeeld. Elk echt query-gebaseerd antwoord blijft slagen, terwijl een hardgecodeerde
SELECT … UNION ALL …die de voorbeeldliteralen kopieerde nu als "fout" wordt beoordeeld. 25 datasets uit de laatste catalogusbatch worden gedekt (lijsten, CTE, window, pivot, DML, expert).
Twee door cursisten gemelde opdrachtproblemen verholpen: het verkeerd geordende voorbeeld in "Studenten per regio" en de beschrijving die was afgeweken van het schema in de netto-omzetopdracht.
- Opdracht "Studenten per regio" (#357): het voorbeeld loopt nu oplopend op
rn(Jack / Kim / Lars in de eerste rij), en de referentieoplossing bevat een explicieteORDER BY rnzodat ze dezelfde volgorde produceert. - Opdracht "Gebruikers met een netto-omzet van minstens 100" (#783): titel en beschrijving komen nu overeen met de werkelijke data — gebruikers en
purchase/refund-gebeurtenissen, niet producten ensale/refund, met een drempel van 100, niet 1000.
Zes geavanceerde opdrachten leveren nu een vooraf geseede tabel — oplossingen beginnen niet langer met een CREATE TABLE-aanloop.
- Zes Hard / Expert-opdrachten (UPSERT met één en met meerdere kolommen, CTE met
RETURNING, bulk-INSERT … RETURNING,SKIP LOCKED-wachtrij, array uitvouwen viaUNNEST) sluiten aan bij de rest van de geavanceerde catalogus: de tabel wordt aangemaakt en geseed in de dataset, en de oplossing bevat alleen de geteste bewerking plus een afsluitendeSELECTvoor de beoordeling.
- De beschrijving van de opdracht "Weergaveteller" wijkt niet langer af van de verwachte uitvoer: beide beschrijven nu dezelfde tabel
counters(id, count)en vijf uitvoeringen van dezelfde rij.
DDL-opdrachten tonen geen niet-gerelateerde tabellen meer in het zijschemapaneel.
- Bij 10
CREATE TABLE-opdrachten (van easy tot expert) toonde het zijschemapaneel tabellen uit een niet-gerelateerde dataset — bijv. een opdracht over artikelen toondeorders. Het paneel is nu leeg, zoals het hoort wanneer een opdracht je vraagt de tabel vanaf nul op te bouwen.
115 nieuwe opdrachten, een themaschakelaar met drie standen Dag / Avond / Nacht, en een zachter donker palet.
- De catalogus is met 115 opdrachten gegroeid: 20 easy, 35 medium, 45 hard en 15 expert — subqueries, CTE's, window-functies, DML/DDL, MERGE, queryoptimalisatie, transacties, JSONB, recursie en
LATERAL. - Nieuw moeilijkheidsniveau «Expert» met een violette badge en een eigen filter in de catalogus.
- Themaschakelaar met drie standen: Dag (licht), Avond (zacht donker) en Nacht (diep) — kies op basis van het omgevingslicht om vermoeide ogen te voorkomen.
- Donker thema verzacht: het canvas is verschoven naar een Linear-achtig grijsblauw (
#1B1B1F) in plaats van het vorige bijna-zwart, primaire tekst is naar zinc-300 verlaagd — minder halo bij lange sessies. - In de modus «Nacht» zit het SQL-editorvenster drie stappen dieper dan het canvas met een lichte verschuiving naar echt zwart — leest als een verzonken paneel binnen dezelfde familie.
- De onderwerp-cheatsheet in de opdracht houdt nu rekening met de moeilijkheid: op de niveaus Hard / Expert verbergt hij de basis
SELECT/WHERE/ORDER BY/LIMITen haalt in plaats daarvan geavanceerde patronen naar voren —STRING_AGG,ARRAY_AGG,GROUPING SETS,LATERAL, JSONB, partiële indexen, enzovoort. - Actieve pillen van het moeilijkheidsfilter zijn overgeschakeld naar een zachte vulling in de merkkleur in plaats van effen zwart — ze breken de look van het lichte thema niet meer.
- Russische moeilijkheidslabels: «Лёгкое» → «Лёгкий», «Среднее» → «Средний», «Сложное» → «Сложный».
24 nieuwe blogartikelen voor beginners.
- Onderwerpdekking uitgebreid: DML (
INSERT/UPDATE/DELETE), DDL (CREATE TABLE/ALTER TABLE), aggregaten,DISTINCT, NULL-afhandeling (CASE WHEN/COALESCE/NULLIF), CTE's en subqueries, window-functies, string en datum.
- Cheatsheet van de trainer: elk item verwijst nu naar zijn eigen artikel. Voorheen verwezen de vier window-functie-items naar één overzicht —
ROW_NUMBER,RANK/DENSE_RANK,PARTITION BYenLAG/LEADhebben nu elk een eigen artikel.
- Opdracht #114 "Hoeveel cardiologieafdelingen" — de verwachte uitvoerkolom hernoemd van
countnaarwards_countzodat hij niet langer visueel botst met het gereserveerde sleutelwoord.
De maas voor antwoord-opvulling gedicht: opdrachten worden nu beoordeeld tegen een verborgen dataset.
- De beoordelaar kan een opdracht nu tegen een verborgen dataset uitvoeren. De canonieke referentie wordt op dezelfde data herberekend, zodat correcte oplossingen blijven slagen terwijl constanten die uit het zichtbare voorbeeld zijn overgenomen, afvallen.
- De opdracht "Oudste clublid" accepteert geen hardgecodeerde
LIMITmeer die op het zichtbare voorbeeld is afgestemd — alleen een query die "alle rijen met de minimale geboortedatum" uitdrukt, slaagt.
Verfijning van de prijskaarten en fixes voor de knop "Inloggen & abonneren" vlak na v2.2.0.
- De prijs en de CTA-knop in de Free- en Premium-kaarten staan nu op dezelfde Y uitgelijnd.
- De prijsvoetnoten voor Crypto en Visa/MC ingekort — alleen de naam van de betaalmethode blijft staan.
- De knop "Inloggen & abonneren" is weer klikbaar voor uitgelogde gebruikers.
Betalingen met crypto en internationale Visa/Mastercard toegevoegd, plus de antibotbeveiliging op de authenticatieflow aangescherpt.
- Cryptobetalingen via NowPayments — BTC, ETH, USDT en andere. $21 per kwartaal / $28 per halfjaar.
- Internationale Visa/Mastercard via Paddle met automatische btw/sales tax. $21 / $28.
- Keuzemenu voor betaalmethode op de Premium-kaart: RU-kaart, Crypto, Visa/MC. De valuta wisselt per methode.
- Cloudflare Turnstile bij inloggen en registreren — onzichtbaar voor mensen, blokkeert bots.
- Het account wordt 15 min vergrendeld na 5 verkeerde wachtwoorden (exponentieel oplopend tot 24 u) met een expliciete aftelling.
- Fouten bij inloggen en registreren zijn menselijker gemaakt — geen ruwe "Forbidden" of "Invalid credentials" meer.
- Rate-limit op inzendingen: 5/min, 30/15min per gebruiker. Beïnvloedt echte oplossessies niet.
- Na het inloggen keren we terug naar de pagina waar je vandaan kwam — inclusief OAuth (Google, GitHub, Yandex).
- Uitloggen vanaf een openbare pagina stuurt je niet meer naar de homepage.
De fix voor het opslaan van Telegram, GitHub en LinkedIn op de profielpagina afgerond. De vorige release repareerde de normalisator voor gebruikersnamen op de backend, maar de front-end-component sloot onBlur kort — de PATCH werd nooit verzonden. Het veld accepteerde de invoer visueel, de server bleef leeg, en na een herlaadbeurt was het veld leeg. Nu gebruikt de blur-vergelijking de waarde die bij focus is vastgelegd, niet de invoer die nog onderweg is.
- De velden Telegram, GitHub en LinkedIn op de profielpagina slaan weer op. Een useEffect overschreef de "laatst opgeslagen"-ref bij elke toetsaanslag, waardoor de onBlur-controle de huidige waarde met zichzelf vergeleek en de PATCH oversloeg. De blur-controle vergelijkt nu met een snapshot die bij focus is gemaakt.
Het opslaan van Telegram-, GitHub- en LinkedIn-handles op de profielpagina gecorrigeerd: het typen van het placeholderformaat zoals t.me/username werd ingekort tot onzin zoals t.me. Nu wordt elke invoer — kale handle, @handle, t.me/handle of https://t.me/handle — genormaliseerd tot een schone gebruikersnaam.
- De velden Telegram, GitHub en LinkedIn op de profielpagina slaan nu correct op wanneer het adres zonder
https://wordt getypt. Voorheen werdt.me/durovopgeslagen alst.meengithub.com/octocatalsgithub.com, omdat de normalisator eenhttp(s)://-schema vereiste en de waarde anders bij de eerste slash afkapte.
De foutieve premium-upsellbanner in het oplosresultaatpaneel verwijderd: hij verscheen bij gratis opdrachten en zelfs bij premium-gebruikers. Het was sowieso dode UI — premium-opdrachten worden bij het openen geblokkeerd, dus de editor ziet ze nooit.
- In de feestmodal "Correct!" heeft de pil "+50% Power per oplossing — ga Premium" nu correcte horizontale padding — de kroon en het pijltje raken de randen van de pil niet meer.
- AI Mentor ontvangt nu compacte opdrachtcontext: actief SQL-dialect, tabellen, relaties, verwachte kolommen, voorbeelduitvoer en de laatste beoordelingsdiff. De referentie-SQL wordt alleen als privécontext gebruikt voor foutuitleg en latere hintniveaus.
- De upsellbanner "Interviewopdrachten — Premium" is weg uit het feedbackpaneel. Voorheen activeerde elke server-side-fout met het woord
premiumin de stack trace (bijv. een ontbrekende kolomsolved_as_premiumvlak na een migratie) een substring-match en toonde de upsell — zelfs bij gratis opdrachten en zelfs bij premium-gebruikers.
Premium geeft nu +50% Power per opgeloste opdracht — de boost blijft voor altijd aan de opdracht plakken, zelfs nadat het abonnement is verlopen. AI Mentor stort niet langer bij de eerste hint de oplossing uit en bouwt de hulp nu per opdracht op. Ook de starttekst -- Klik ▶ Run is uit de editor van de eerste opdracht verwijderd.
- Een Premium-abonnement geeft een ×1,5 Power-vermenigvuldiger bij elke opgeloste opdracht. De boost wordt vastgezet op het moment van oplossen, dus hij blijft in je totaal staan, zelfs als het abonnement later verloopt.
- De feestmodal "Correct!" toont nu een upgradeprikkel voor gratis gebruikers direct onder de +Power-chip: "Krijg +50% Power per oplossing — ga Premium", met een link naar /pricing.
- AI Mentor bouwt hints nu per opdracht op. Het eerste verzoek krijgt alleen een richtinggevende duw zonder operatornamen; verzoeken 2-4 voegen concept en categorie toe; vanaf verzoek 5 mag de mentor
LIKE/WHERE/GROUP BYrechtstreeks noemen. De teller wordt elke 24 uur gereset. - Uitleg bij foute antwoorden volgt nu dezelfde hintniveaus als gewone hints — ze onthullen niet langer specifieke operatoren bij de allereerste mislukte inzending.
- De resterende bevindingen uit de SQL-opdrachtaudit gesloten: de referentie van Tournament Winners gecorrigeerd, TIMESTAMP-previews op verschillende opdrachten afgestemd, en de PostgreSQL-variant voor één AI-opdracht hersteld.
- De starttekst
-- Klik ▶ Run — kijk wat er in deze tabel zitverwijderd uit de editor van de eerste opdracht. Geopende opdrachten beginnen nu met een lege editor.
De filters van de opdrachtcatalogus herzien: status werd een gesegmenteerde besturing met 3 standen (Alle / Onopgelost / Opgelost) met Onopgelost als standaard, een dialectfilter toegevoegd, onderwerp- en bedrijfschips tonen nu hun huidige aantal opdrachten, en actieve filters verschijnen als verwijderbare pillen met een "Alles wissen"-optie.
- Dialectfilter in de catalogus: Alle / PG / MySQL — een eigen segment naast de statusbesturing.
- Onderwerp- en bedrijfschips tonen nu hoeveel opdrachten overeenkomen: "Windows (43)", "Tinkoff (5)". Chips met nul opdrachten vervagen.
- Rij met actieve-filterpillen: elk toegepast filter (zoeken, moeilijkheid, status, dialect, favorieten, onderwerp, tag, bedrijf, regio) verschijnt als een verwijderbare pil; "Alles wissen" zet alles terug naar de standaardwaarden.
- Het opdrachtstatusfilter is nu een gesegmenteerde besturing met 3 standen (Alle / Onopgelost / Opgelost), met Onopgelost als standaard. Vervangt de enkele schakelaar "Opgeloste verbergen".
- De sorteerbesturing is naar de bovenbalk verplaatst — voorheen onderaan weggestopt en verborgen achter de scroll.
- De favorietenschakelaar is naar de bovenste filterbalk verplaatst — nu naast de andere binaire schakelaars.
- De filterbadge toont niet meer standaard "1" — de standaardweergave "Onopgelost" telt niet als een toegepast filter.
Catalogusbrede audit: de beoordelaar wijst correcte antwoorden niet meer af vanwege DATE-versus-TIMESTAMP-serialisatie, voorbeeldpreviews op 60+ opdrachten komen nu overeen met wat de referentieoplossing daadwerkelijk teruggeeft, en 5 opdrachten die CURRENT_DATE / NOW() gebruiken zijn vastgezet op een vaste referentie zodat previews niet meer dag na dag verschuiven. Plus een beschrijvingsfix op de opdracht over maandelijkse transacties naar aanleiding van een gebruikersmelding.
- Beoordelaar: normalisatie van datum-als-timestamp toegevoegd (
2024-01-01T00:00:00.000Z↔2024-01-01) — correcte antwoorden krijgen geen "aantal rijen klopt, inhoud verschilt" meer vanwege opmaak van het retourtype. - Opdracht "Maandelijkse transacties en chargebacks": de beschrijving verduidelijkt nu dat een chargeback bij de maand van de oorspronkelijke transactie hoort, niet bij de datum van de terugbetaling; de preview toont datums van de eerste dag van de maand in plaats van naar tijdzone verschoven ISO-timestamps.
- Voorbeeldpreviews op 60+ opdrachten opnieuw gegenereerd: numerieke opmaak (
100→100.00), tijdzoneweergave (+03→+00), DATE-als-TIMESTAMP, INTERVAL-als-object — de preview komt nu overeen met wat de live runner teruggeeft. - Vijf opdrachten die
CURRENT_DATE/NOW()/CURRENT_TIMESTAMPin hun seed gebruiken (#170, #601, #602, #668, #693) zijn nu vastgezet op2026-05-05 12:00:00 UTC. Previews verschuiven niet meer.
De blog herzien: zoeken, navigatie via 10 secties, eerste 7 tutorials voor beginners. Commandonamen in de cheatsheet binnen de opdracht zijn nu klikbare links naar artikelen. De releasepagina heeft een versieboom met scroll-spy gekregen.
- Blog: zoeken over titels, inhoud en tags + een linker sectiebalk. De actieve sectie wordt bij het scrollen gemarkeerd.
- Blog: 7 eerste tutorials voor beginners —
SELECT … FROM,WHERE,ORDER BY,LIMIT,INNER JOIN,LEFT JOIN, aliassen. - Onderwerp-cheatsheet binnen de opdracht: commandonamen zijn nu blauwe links naar de bijpassende blogtutorial — ze openen in een nieuw tabblad.
- Releasepagina: een versieboom aan de linkerkant gegroepeerd op
major.minor; klikken scrolt naar de versie en werkt het hash-anker bij. - Knop "Kopieer SQL" op elke rij van het tabblad Inzendingen.
- Russische meervoudsovereenstemming overal: "221 задача", "2 задачи", "5 задач" in plaats van het oude "221 задач".
- De onderwerp-cheatsheet binnen de opdracht trilt niet meer bij het uitklappen — de ruimte voor de scrollbar is nu gereserveerd.
- Markdown-tabellen in blogartikelen worden nu als HTML-tabellen weergegeven in plaats van één regel platte tekst.
Catalogusbrede kwaliteitsronde: 23 onuitvoerbare opdrachten hersteld, 66 Engelse beschrijvingen herschreven, beschrijvingen en voorbeeldpreviews op nog enkele tientallen meer op één lijn gebracht. Plus één door een gebruiker gemelde fix.
- Voorbeeldpreviews op 50+ opdrachten komen nu overeen met wat de referentieoplossing teruggeeft.
- Dubbele bedrijfstags in de filterchips van opdrachten samengevoegd.
- 23 opdrachten hersteld (pharma-*, loyal-*, hotel-*, qa-*) die door een schema/seed-mismatch niet opgelost konden worden.
- De Engelse beschrijvingen herschreven van 66 lc-* / lc2-*-opdrachten die voorheen een stub of fragment bevatten.
- De opdracht "Kamers geboekt op 2 september 2019" accepteert het verkeerde antwoord niet meer.
- Tien opdrachten waar de beschrijving niet overeenkwam met de referentieoplossing zijn nu consistent.
- Zeven Tochka-opdrachten bevatten andermans opgave — herschreven.
69 nieuwe opdrachten uit echte sollicitatiegesprekken op de Russische markt (Yandex, Tinkoff, Sber, VTB, Alfa, VK, Ozon, Avito, Magnit, Samokat en 23 andere bedrijven) — opgebouwd rond het bredere PostgreSQL-type-universum: UUID, JSONB, ENUM, INTERVAL, TSTZRANGE, INET, NUMERIC en POINT. Plus belangrijke fixes naar aanleiding van gebruikersmeldingen en een "Wat is er nieuw"-rode-stipindicator in de zijbalk.
- 69 nieuwe opdrachten uit echte sollicitatiegesprekken bij Russische bedrijven. 33 werkgevers: 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 en Yandex Practicum. Allemaal getagd als Interview, toegankelijk voor Premium.
- Rijke PostgreSQL-types in opdrachtschema's. De meeste opdrachten gebruikten vroeger
INT+VARCHAR(100)— prima voor schoolvoorbeelden, ver van productie. De nieuwe opdrachten introducerenUUIDvoor primaire sleutels van klanten en bestellingen,NUMERIC(15,2)voor geld enNUMERIC(12,4)voor wisselkoersen,TIMESTAMPTZvoor gebeurtenissen,INTERVALvoor gespreks- en sessieduren,TSTZRANGE/DATERANGE/NUMRANGEvoor SCD2-historie en geldigheidsvensters,JSONBvoor metadata en event-payloads,ENUM(met explicieteCREATE TYPE) voor statussen en categorieën,INETvoor IP's in antifraudeopdrachten,POINTvoor GPS-coördinaten,TEXT[]/INTEGER[]voor tags en ID-arrays. Zo stelt de trainer je bloot aan dezelfde types die je in productie tegenkomt. - Rode-stipindicator op het zijbalkitem "Wat is er nieuw" — verschijnt wanneer er een nieuwe release is uitgebracht die je nog niet hebt geopend. De stip verdwijnt na één bezoek aan
/releases(de vlag staat in de localStorage van deze browser). Voorheen bestond de indicator alleen in de bovenste navigatiebalk; in indelingen met alleen een zijbalk was hij onbereikbaar.
- Correcte weergave van de nieuwe types in de queryresultatentabel. Voorheen werden kolommen
JSONB,INTERVALenPOINTweergegeven als "[object Object]" en werden arrays (TEXT[],INTEGER[]) teruggebracht tot door komma's gescheiden strings — de structuur was onzichtbaar. Nu worden JSONB en arrays weergegeven als leesbare JSON, INTERVAL als1d 02:30:00, POINT als(x, y). Booleans en UUID's behouden hun tekstweergave. - ER-diagrammen op de opdrachtpagina hebben paletvermeldingen voor de nieuwe types gekregen: UUID violet, JSONB geel, INTERVAL paars (dezelfde familie als andere datum/tijd-types), TSTZRANGE / DATERANGE / NUMRANGE roze, INET cyaan, POINT roze, aangepaste ENUM's rozerood. Voorheen vielen deze types terug op het standaardgrijs en waren ze niet te onderscheiden van gewone INT / VARCHAR.
- De zes bovenstaande gecorrigeerde opdrachten kregen ook een verrijkt schema in dezelfde stijl als de nieuwe interviewset:
UUID-primaire sleutels,JSONB-payloads,ENUM-types voor geslacht / categorieën / statussen,NUMERIC(15,2)in plaats vanINTvoor salarissen en prijzen,INTERVALvoor duren. De formulering van de opdracht is licht aangepast om de nieuwe types te motiveren, maar het onderliggende vraagstuk is ongewijzigd. Dit is de eerste stap in het upgraden van oudere opdrachten — meer in komende releases.
- Een handvol oudere opdrachten gecorrigeerd die door gebruikers waren gemeld. "Project Employees II" — het ER-diagram toonde Employee + Department in plaats van Project + Employee, terwijl het onderliggende schema correct was; het diagram in lijn gebracht. "Reported Posts" — de beschrijving maakte niet duidelijk dat de reden van de melding in de kolom
extrastaat: nu wel. "Sales Analysis I" — de referentieoplossing gebruikteSUM(price)hoewel het schema een kolomquantityheeft, wat verwarrend was; opnieuw geformuleerd alsSUM(quantity * price), dichter bij omzet in de praktijk. "Swap Salary" — de opdracht was aan de verkeerde dataset gekoppeld (Employee + Department in plaats vanSalary(id, name, sex, salary)), waardoor hij onoplosbaar was; opnieuw gekoppeld aan de canonieke dataset. Dezelfde stille ER-afwijking in "Project Employees III" en "Reported Posts II" kreeg dezelfde fix.
Grote release: een nieuwe navigatie met linkerzijbalk, de strikte Mock Interview-modus met een +25% Power-bonus, openbare profielen en vrienden, e-mailmeldingen, bedrijfstags in merkkleuren, extra filters en een blok met partnercursussen. Plus een belangrijke privacyfix tussen accounts en tientallen UX-verfijningen.
- Blok met partnercursussen. Op de opdrachtenpagina (brede schermen) toont een rechterkolom een zorgvuldig gekozen set partnercursussen; op mobiel is het een horizontale carrousel boven de lijst. De kaarten linken naar landingspagina's van partners met UTM-tags — voor ons een manier om de abonnementsprijs laag te houden door de infrastructuurkosten te dekken.
- Nieuwe Mock Interview-modus — een strikte simulatie van een echt sollicitatiegesprek. Elke enkele overtreding (tabblad wisselen, plakken, fullscreen verlaten, vensterfocus > 1 seconde kwijt) laat de sessie automatisch mislukken. Hints, AI Mentor en cheatsheet zijn verborgen en vergrendeld. Duren: 5 / 10 / 15 / 30 / 60 minuten. Gratis tier — 1 poging per dag; Premium — onbeperkt. Terwijl een sessie loopt is de omringende navigatie (zijbalk, "Opdrachten", "Topoplossingen", "Volgende opdracht", "Track verlaten", Vorige/Volgende/Willekeurig) vergrendeld — de enige uitweg is de expliciete knop "Beëindigen" of het sluiten van het tabblad (waarmee de sessie automatisch wordt afgebroken).
- +25% Power voor elke opdracht die in de Mock Interview-modus wordt opgelost — de bonus is per opdracht en wordt aangegeven in het rapport na de sessie. Het scorebord heeft nu een informatieve "Mock"-kolom (hetzelfde aantal wordt getoond op de profielkaart en op
/u/<username>); deze beïnvloedt de op Power gebaseerde sorteervolgorde niet. - Openbare profielen op
/u/<username>: kies een korte handle en zet de openbare schakelaar om — elke anonieme bezoeker ziet je rang, Power, huidige streak, aantal prestaties, activiteitsheatmap en links naar GitHub / Telegram / LinkedIn. Geen privédata blootgesteld. - Vrienden: voeg gebruikers toe via hun openbare handle, beheer inkomende en uitgaande verzoeken, en bekijk een speciaal vriendenscorebord-tabblad met hun Power, streak en opgeloste opdrachten.
- Favorieten: elke opdrachtkaart heeft nu een ster — klik erop en de opdracht belandt in het filter "Alleen favorieten". De lijst staat op de server gekoppeld aan je account en blijft behouden bij het wisselen van browser.
- E-mailmeldingen (schakelaars in het profiel). "Bewaar je streak" — een avondherinnering wanneer je streak ≥ 3 dagen is en je vandaag nog niets hebt opgelost. "Wekelijkse samenvatting" — een zaterdagochtendoverzicht met de opgeloste opdrachten van vorige week, je huidige streak en je zwakste categorie.
- Premium-gebruikers worden visueel gemarkeerd overal waar avatars verschijnen: een holografische gradiëntring (scorebord, vrienden, profiel, zijbalk, openbare
/u/<username>-pagina); een kleine Crown-badge in de hoek op grote avatars. Beïnvloedt de sorteervolgorde niet. - Bedrijfstags in merkkleuren op opdrachtkaarten: geel voor Yandex / Tinkoff / Beeline, groen voor Sberbank / Spotify / OpenAI, blauw voor VK / Ozon / Google / Meta, rood voor MTS / Alfa / Tesla, paars voor Stripe / Skypro / Wayfair, oranje voor Amazon / Alibaba enzovoort. Voorheen had elke tag dezelfde paarse kleur.
- Extra SQL-clausulechips in het filter "Onderwerp" op de opdrachtenpagina: naast de 8 brede categorieën (SELECT, JOIN, subqueries, window, aggregaten, CTE, DML, DDL) kun je nu
GROUP BY,COUNT,HAVINGin- en uitschakelen. Combineer ze met categorieën voor scherper filteren. - Het paneel "DB-schema" op de opdrachtpagina kan nu worden ingeklapt. De schakelaar naast de opdrachttitel verbergt de kolom en maakt breedte vrij voor de editor en de resultatentabel. De inklapstatus wordt per browser onthouden, zodat het schema bij de volgende opdracht op dezelfde manier opent.
- 8 nieuwe interviewopdrachten van Tochka — variërend van EASY tot HARD. CRM-scenario's (klanten vinden met een actieve aanvraag), portefeuilleberekeningen (structuur, gewogen gemiddelde looptijd, waardeontwikkeling), obligatiequery's met window-functies. Oplossingen voor zowel PostgreSQL als MySQL.
- Blogsectie op
/blog. Uitgebreide tutorials — we trappen af met een verdieping over window-functies. Tweetalige content, slug-URL's, OG-kaarten voor delen op social media. Bereikbaar vanuit de footer en de onderkant van de zijbalk. - Aangepaste 404-pagina. De oude standaard van Next.js gaf zwarte tekst op wit weer — onzichtbaar in de donkere modus. De nieuwe pagina gebruikt themetokens en zit binnen de gedeelde shell, zodat de navigatie binnen handbereik blijft.
- Navigatie opnieuw ontworpen. Voor ingelogde gebruikers binnen de app is de primaire navigatie verplaatst naar een linkerzijbalk — Trainer, Voortgang, Scorebord en de andere secties staan daar, met Power + streak onder je avatar en taal-/themaschakelaars onderaan. De landingspagina, prijzen en authenticatieflows behouden de slanke bovenbalk. Hulppagina's (Wat is er nieuw / Een bug melden / Blog) nemen over welke chrome je ook vandaan kwam.
- De Premium-gradiëntring rond avatars verschijnt nu op elk scorebordtabblad — voorheen verscheen de ring alleen op het tabblad "Aller tijden" en viel hij stilletjes weg op "Week" en "Maand" omdat de backend de abonnementsvlag niet meegaf voor de periodieke rankings.
- Wijzigingen aan naam en avatar in je profiel verschijnen nu direct in de zijbalk — geen herlaadbeurt nodig. Voorheen kon de oude gebruikerskaart blijven hangen tot een volledige verversing.
- Datalekken tussen accounts bij het wisselen van gebruiker in dezelfde browser. Voorheen konden deze blijven bestaan na uitloggen/inloggen met een ander account: chatdraden van AI Mentor, SQL-concepten in de editor, "opgelost"-vlaggen per opdracht, actieve mock-interviewsessies, de AI-generatieteller en de favorietencache. Nu wist het uitloggen en elke inlogroute (formulier, OAuth, e-mailverificatie) alles wat aan de vorige gebruiker is gekoppeld.
- De link "Vriendenscorebord" vanuit het profiel landt nu direct op het tabblad Vrienden — voorheen kwam je op het globale scorebord terecht. De beginnersbaan "Begin hier" komt niet meer terug nadat je hem hebt weggeklikt; voorheen werd het wegklikken bij elke uitlog-/inlogbeurt gereset.
- Tientallen verfijningen aan de mobiele indeling en interactie: een compactere rapportmodal na de sessie, correcte filterafstand op smalle schermen, de feedbackbanner overlapt het zijpaneel niet meer bij 1024px, en velden voor naam + e-mail op de bugmeldpagina voor anonieme inzenders.
Editor-UX-hotfix op smalle schermen: het pop-upvenster "Editorinstellingen" wordt niet langer afgekapt door het codepaneel en loopt niet meer voorbij de rand van de viewport op mobiel. Dezelfde tandwielknop die de desktop heeft, staat nu ook in de mobiele werkbalk, en de lettergrootte-instelling wordt eindelijk toegepast op de mobiele editor.
- Het pop-upvenster "Editorinstellingen" kon door de paginaranden worden afgekapt en had geen interne scroll — op een smalle laptop of een telefoon was de helft van de instellingen simpelweg onzichtbaar. Het venster wordt nu bovenop de hele pagina weergegeven (via een portal), klemt zich automatisch binnen het zichtbare gebied, en krijgt een interne scrollbar wanneer de inhoud de hoogte van de viewport overschrijdt. De header met de titel en sluitknop blijft vastgezet tijdens het scrollen.
- In de mobiele editorweergave (≤1024px) ontbrak in de werkbalk het tandwiel voor editorinstellingen — "Lettergrootte" was alleen bereikbaar vanaf de desktop. Het tandwiel staat nu naast PG/MySQL en Format, en de lettergrootte-instelling schaalt de mobiele editorinvoer daadwerkelijk.
Hotfix naar aanleiding van een bugmelding: opdracht #240 ("Staff Bonuses") gaf het verkeerde schema weer — hij toonde Employee + Department in plaats van het echte Employee + Bonus, waardoor de opgave onleesbaar werd.
- Opdracht #240 "Staff Bonuses": de schemaviewer gaf verouderde tabellen
Employee + Departmentweer (met de veldendepartment_id,manager_id) en een leegDepartment-tabblad. De sandbox en de referentieoplossing waren al die tijd correct — alleen de viewermetadata klopte niet. Nu toont het schema de echte tabellenEmployee + Bonusmet de relatieBonus.empId → Employee.empId.
Datasets verrijkt in 268 van de 339 opdrachten — vollere brontabellen, betekenisvollere rijen in de verwachte uitvoer, opdrachten voelen niet langer kapot aan.
- Massale datasetverrijking: 268 van de 339 opdrachten kregen vollere seed-data — doorgaans 6-12 rijen in primaire tabellen in plaats van 2-4, met variatie langs de filter-/JOIN-/GROUP BY-assen die de referentieoplossing aanspreekt. 137 unieke datasets aangeraakt. Referentieoplossingen en schema's zijn ongewijzigd. De voortgang van gebruikers blijft behouden — al opgeloste opdrachten blijven opgelost, en Power en prestaties worden niet opnieuw berekend.
- Elke verrijkte opdracht is gevalideerd: de referentieoplossing is via de executor tegen de nieuwe seed uitgevoerd en sample_output is opnieuw gegenereerd op basis van het werkelijke resultaat.
- Opdracht #38 (
well-paid-employees) — oorspronkelijk een v1.2.4-hotfix, nu onderdeel van de bredere ronde.
Hotfix naar aanleiding van een bugmelding: het paneel "Voorbeeld van verwachte uitvoer" verduidelijkt nu dat het aantal rijen daar niet hoeft overeen te komen met de tabellen in het schema.
- Een disclaimer toegevoegd boven het paneel "Voorbeeld van verwachte uitvoer": "zo ziet een correct antwoord eruit — het heeft zijn eigen aantal rijen, dat niet hoeft overeen te komen met de tabellen in het schema". Voorheen telden gebruikers de rijen in een van de schematabellen en gingen ervan uit dat de opdracht kapot was wanneer de aantallen verschilden.
Hotfix naar aanleiding van een bugmelding: opdracht #38 "Salaris hoger dan manager" draait nu op een goede dataset met drie echte gevallen. Plus een kleine oranje stip op "Wat is er nieuw?" wanneer er een verse release uitkomt.
- Een kleine oranje stip verschijnt op het navigatie-item "Wat is er nieuw?" wanneer er een verse release uitkomt. Eén bezoek aan
/releaseswist hem tot de volgende release.
- Opdracht #38 (
well-paid-employees): de dataset was te schaars — 6 werknemers en één enkel geval van "ondergeschikte verdient meer dan manager", waardoor het leek alsof de data fout was. Uitgebreid naar 9 werknemers verspreid over twee afdelingen met drie duidelijke gevallen (Eve > Alice, Frank > Dave, Henry > Bob).
Nieuwe pagina "Een bug melden" met schermafbeeldingsbijlagen, een secundaire navigatiegroep, en een compactere "Begin hier"-baan op mobiel.
- Nieuwe pagina "Een bug melden" in de navigatiebalk: een formulier met onderwerp + beschrijving en maximaal 5 schermafbeeldingen / korte clips (drag-and-drop ondersteund). Meldingen belanden in onze inbox voor snelle triage.
- De navigatiebalk krijgt een secundaire groep — "Wat is er nieuw?" en "Een bug melden" — gescheiden van de primaire tabbladen door een dunne verticale scheidingslijn.
- De beginnersbaan "Begin hier" is compacter op mobiel — kortere titel, verborgen beschrijving, smallere kaarten. Maakt ruimte vrij voor de opdrachtenlijst zelf.
- De beginnersbaan "Begin hier" flitst niet meer een fractie van een seconde bij het openen van de opdrachtenpagina — hij wordt nu pas weergegeven nadat
/progressis opgelost. - De highlight van de release-notes (de oneliner bovenaan) geeft backticks nu correct weer — voorheen toonde hij letterlijk "
?lang=" in plaats van een gestileerde code-pil. - De spookachtige verticale scrollbar op de pagina "Leertracks" is verdwenen —
min-h-screenin combinatie met de navigatiebalk dwong ~60px extra hoogte af, zelfs wanneer de inhoud paste.
UX-verfijning over de hele trainer plus een ?lang=-URL-parameter voor advertenties en directe taalspecifieke links.
- Land op een specifieke taal via
?lang=enof?lang=ruin de URL:https://sql.coderang.dev/?lang=en. Handig voor advertenties en het delen van taalspecifieke links; de keuze wordt een jaar onthouden.
- Wanneer de dagelijkse AI-hints op zijn, verandert de knop "Uitleggen" in "Cheatsheet" en opent hij de onderwerpreferentie.
- De favorietenster is nu zichtbaar op mobiel en vaag zichtbaar op desktop, in plaats van verborgen tot je erover beweegt.
- De opdrachtbeschrijving springt niet meer wanneer de cheatsheet uitklapt. De ster is helderder bij hover.
- Bij DDL-opdrachten toont het schemapaneel "geen begintabellen; maak ze aan" in plaats van een leeg canvas.
- De AI-knop pulseert nu daadwerkelijk alleen bij fouten (de animatieklasse was voorheen nooit gedefinieerd).
- Power en Streak in de navigatiebalk worden uit localStorage geseed vóór de serverfetch — geen "0 ⚡"-flits meer.
- De AI-generatieteller wordt niet meer naar 0 gereset na het doorsturen naar de gegenereerde opdracht.
- Mobiele finesses: moeilijkheidsbadges van gelijke breedte (Ster uitgelijnd), tekst van het onderste tabblad past, schaalanimatie voor de dagteller, tooltip op het streak-icoon, Russische meervoudsregels.
- Russische bedrijfsnamen (Сбербанк, Яндекс, Авито…) worden nu in Latijnse transliteratie weergegeven (Sberbank, Yandex, Avito) in de Engelse interface; Cyrillisch blijft op het Russisch.
- Namen van cheatsheet-items (Aliassen, Scalaire subquery, enz.) worden nu correct vertaald bij het wisselen van taal.
- Het weekelijkse/maandelijkse scorebord past nu de eerste-poging-×2-bonus toe en negeert herinzendingen, in lijn met hoe de levenslange Power wordt berekend. Voorheen toonde de periodeweergave ongeveer de helft van de levenslange — een fout in de rekenwijze, niet in de data.
- Een dood Solutions-tabblad verwijderd — geen knop activeerde het, maar het dupliceerde de load.
- Backticks laten geen ruimte meer voor de erop volgende interpunctie ("
Action."). - Lege toestanden van het resultaatpaneel worden nu correct naar het Engels vertaald.
Verfijning voor opdrachten met datawijziging en voor de algehele weergave van beschrijvingen.
- Let op voor DDL/DML-opdrachten: UPDATE/INSERT/DELETE- en CREATE/ALTER/DROP-opdrachten tonen nu een korte melding "geen afsluitende SELECT nodig" — niet meer gokken wat je moet uitvoeren.
- De onderwerp-cheatsheet houdt nu rekening met het opdrachttype: DML-opdrachten tonen geen SELECT/ORDER BY/LIMIT meer, DDL-opdrachten tonen alleen commando's voor schemawijziging.
- Tokens tussen backticks in opdrachtbeschrijvingen (\
id = 4\, \users.email\) worden nu weergegeven als accent-code-pillen in plaats van ruwe tekst — beschrijvingen lezen precies zoals de auteurs ze schrijven. - Codeblokken in de cheatsheet hebben nu een accentbalk aan de linkerkant en een subtiele rand — ze lezen als echte codefragmenten in plaats van grijze blobs.
Onboarding voor nieuwkomers: een "Begin hier"-baan, start-SQL bij je eerste opdracht, en een onderwerp-cheatsheet binnen elke opdracht. Hints bij foute antwoorden zijn nu specifiek en verbruiken je AI-quota niet.
- Een "Begin hier"-baan bovenaan de opdrachtenpagina — 8 eenvoudige SELECT-opdrachten voor beginners. Verschijnt totdat je iets oplost; sleep om te scrollen met een grijpcursor.
- Start-SQL in de editor. De allereerste opdracht die je opent, vult
SELECT * FROM <eerste_tabel> LIMIT 5;alvast in zodat je meteen op ▶ kunt drukken en kunt zien hoe de data eruitziet. - Onderwerp-cheatsheet. Het opdrachtpaneel heeft nu een inklapbaar referentieblok met relevante SQL-commando's, syntaxis en een uitleg in één regel — afgestemd per onderwerp: SELECT, JOIN, aggregaten, subqueries, window, CTE, DML, DDL.
- De banner bij een fout antwoord is nu specifiek: hij noemt extra/ontbrekende kolommen, rijverschillen, sorteerproblemen en veelvoorkomende SQL-fouten. Draait lokaal, verbruikt geen AI-quota.
Alias-bewuste autoaanvulling in de SQL-editor en grote verbeteringen aan de mobiele indeling.
- Releasepagina: de updategeschiedenis is nu zichtbaar op /releases.
- Alias-bewuste autoaanvulling. Na
<alias>.worden de suggesties beperkt tot de kolommen van die ene tabel. De aliassen zelf worden aangevuld met Tab. .is nu een triggerteken: suggesties verschijnen er automatisch na, zonder Ctrl+Space.
- Het mobiele menu overlapt nu de inhoud in plaats van de pagina naar beneden te duwen. Sluit bij een tik daarbuiten.
- 300+ opdrachtbeschrijvingen herschreven: bedrijfscontext toegevoegd, uitvoerkolommen opgesomd, sortering en afronding expliciet gemaakt.
- De mobiele opdrachtbeschrijving scrolt nu correct wanneer de tekst lang is. Voorheen liep het vast en blokkeerde het de toegang tot de tabbladen onderaan.
- De onderste tabbalk van de trainer is nu altijd zichtbaar op elke mobiele browser (Yandex Browser, MIUI, Samsung Internet). Voorheen viel hij weg onder de viewport.
- Het mobiele menu is nu volledig ondoorzichtig. Voorheen scheen 5% van de achtergrondinhoud door op browsers zonder ondersteuning voor backdrop-filter.
- Op smalle schermen (320px en kleiner) loopt het sorteermenu voor opdrachten niet meer over de rechterrand.
- Oude autoaanvullingsbug: het typen van
t.enaFROM employee tvoegdet.employee.salaryin (ongeldige SQL). De alias wordt nu gerespecteerd.
Eerste stabiele release van SQL Arena.
- 259 zorgvuldig gekozen SQL-opdrachten verdeeld over 6 categorieën: SELECT, JOIN, aggregate, subquery, window, DML.
- 96 interviewopdrachten van toptechbedrijven (Google, Meta, Amazon, Stripe, enz.).
- Ondersteuning voor twee SQL-dialecten — PostgreSQL en MySQL met directe schakeling.
- AI-opdrachtgeneratie: unieke opdrachten aangepast aan jouw vaardigheidsniveau.
- AI Mentor: contextuele hints zonder het antwoord prijs te geven.
- 3 leertracks: gestructureerde paden van de basis tot geavanceerde SQL.
- Realtime SQL-uitvoering in een sandboxomgeving met resultaatbeoordeling (verschil in kolom/rij/volgorde).
- OAuth-authenticatie via GitHub, Google, Yandex, plus registratie met e-mail/wachtwoord.
- Op XP (Power) gebaseerd scorebord, gebruikersprofielen, prestaties, en donkere en lichte thema's.
- Premium-abonnement met YooKassa-integratie en antibot-rate-limiting.
- Interactieve ER-schemadiagrammen, Monaco-editor met SQL-markering en -opmaak.
- Tweetalige interface: Russisch en Engels.