Forberedelse til kodeintervjuer · leksjon

Komplett sett med prøveoppgaver til intervju

Tidsbegrensede oppgaver fra start til slutt som kombinerer joiner, vindusfunksjoner og CTE-er under realistiske intervjubetingelser.

Leksjon 4 av 413 trinn

Komplett sett med prøveoppgaver til intervju er en gratis leksjon i Forberedelse til kodeintervjuer på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til kodeintervjuer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.

Slik foregår en SQL-intervjurunde

Denne avsluttende delen går gjennom komplette simulerte oppgaver som kombinerer koblinger, vindusfunksjoner og CTE-er under intervjuforhold. Først metakompetansen: hvordan De bør opptre i intervjuet.

  • Gjenta problemet med egne ord og bekreft skjemaet.
  • Avklar kanttilfeller (NULL-verdier, like verdier, duplikater) før De begynner å kode.
  • Forklar fremgangsmåten, og skriv deretter spørringen.
  • Test spørringen mot et lite eksempel i hodet.

Intervjuere vurderer arbeidsprosessen Deres like mye som den endelige spørringen.

Det felles skjemaet

Alle oppgavene nedenfor bruker dette lille e-handelsskjemaet. Les det én gang, slik at hver spørring gir mening.

  • customers(id, name, country)
  • orders(id, customer_id, order_date, status, amount)
  • order_items(order_id, product_id, quantity)
  • products(id, name, category, price)

Ha dette i tankene; resten av leksjonen refererer til disse tabellene.

-- orders.status is one of: 'paid','pending','cancelled'
-- amount is the order total in the customer's currency

Oppgave 1: Kunder med høyest forbruk

«Returner de tre kundene med høyest samlet betalt beløp, med navn og totalbeløp.»

Fremgangsmåte: filtrer på betalte ordrer, aggreger per kunde, sorter og bruk LIMIT. Si tydelig at De utelater kansellerte og ventende ordrer, et kanttilfelle intervjuere ofte legger inn med hensikt.

SELECT c.name,
       SUM(o.amount) AS total_spend
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'paid'
GROUP BY c.id, c.name
ORDER BY total_spend DESC
LIMIT 3;

Oppgave 2: Kunder som aldri har lagt inn en ordre

«List opp kunder som aldri har lagt inn en ordre.» Dette er mønsteret anti-join. To ryddige løsninger er LEFT JOIN med IS NULL eller NOT EXISTS.

Foretrekk NOT EXISTS fordi det er NULL-sikkert, i motsetning til NOT IN. Nevn dette skillet; det er akkurat dette intervjueren prøver å få frem.

-- NULL-safe anti-join
SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (
  SELECT 1
  FROM orders o
  WHERE o.customer_id = c.id
);

Oppgave 3: Det nest høyeste ordrebeløpet

«Finn det nest høyeste forskjellige ordrebeløpet.» Den ryddigste løsningen som håndterer like verdier, bruker DENSE_RANK, slik at duplikate beløp får samme rangering.

Et kanttilfelle De bør nevne: Hvis det ikke finnes en annen forskjellig verdi, returnerer dette ingen rader. Det kan være akseptabelt, eller det kan være nødvendig med en COALESCE-innpakning, avhengig av kravene.

SELECT amount
FROM (
  SELECT amount,
         DENSE_RANK() OVER (ORDER BY amount DESC) AS rnk
  FROM orders
) ranked
WHERE rnk = 2;

Oppgave 4: Siste ordre per kunde

«Returner hver kundes nyeste ordre.» Dette er mønsteret for å finne den nyeste raden per nøkkel, løst med ROW_NUMBER partisjonert etter kunde og sortert etter dato i synkende rekkefølge.

Legg til en tie-breaker (order id), slik at resultatet blir deterministisk når to ordrer har samme dato. Dette er en detalj som sterke kandidater tar med.

SELECT customer_id, id AS order_id, order_date, amount
FROM (
  SELECT o.*,
         ROW_NUMBER() OVER (
           PARTITION BY customer_id
           ORDER BY order_date DESC, id DESC
         ) AS rn
  FROM orders o
) t
WHERE rn = 1;

Oppgave 5: Vekst fra måned til måned

«Beregn månedlige betalte inntekter og den prosentvise endringen sammenlignet med forrige måned.» Dette kombinerer aggregering i en CTE med LAG.

Trinn én aggregerer per måned; trinn to sammenligner hver måned med den forrige ved hjelp av LAG. Håndter divisjonen slik at den første måneden, som ikke har noen foregående måned, ikke gir en feil.

WITH monthly AS (
  SELECT DATE_TRUNC('month', order_date) AS mth,
         SUM(amount) AS revenue
  FROM orders
  WHERE status = 'paid'
  GROUP BY DATE_TRUNC('month', order_date)
)
SELECT mth,
       revenue,
       LAG(revenue) OVER (ORDER BY mth) AS prev_revenue,
       ROUND(
         100.0 * (revenue - LAG(revenue) OVER (ORDER BY mth))
         / NULLIF(LAG(revenue) OVER (ORDER BY mth), 0), 2
       ) AS pct_change
FROM monthly
ORDER BY mth;

Oppgave 6: Beste produkt per kategori

«Returner det bestselgende produktet etter totalt antall for hver kategori.» Dette er mønsteret for topp N per gruppe: aggreger, ranger innenfor partisjonen og filtrer på rangering 1.

Hvis like resultater skal tas med, bytter De ut ROW_NUMBER med RANK, slik at alle delt ledere vises. Når De nevner dette valget, viser De at De forstår forskjellen.

WITH sales AS (
  SELECT p.category,
         p.name AS product,
         SUM(oi.quantity) AS qty
  FROM order_items oi
  JOIN products p ON p.id = oi.product_id
  GROUP BY p.category, p.name
)
SELECT category, product, qty
FROM (
  SELECT s.*,
         ROW_NUMBER() OVER (
           PARTITION BY category ORDER BY qty DESC
         ) AS rn
  FROM sales s
) r
WHERE rn = 1;

Oppgave 7: Løpende total for inntekter

«Vis en løpende (kumulativ) total for betalte inntekter per dag.» En vindusbasert SUM med en sortert ramme beregner den løpende totalen uten en selvkobling.

Prat om ROWS-rammer for en ekte kumulativ beregning rad for rad. Standardrammen RANGE kan gi uventet oppførsel når datoer er like.

SELECT order_date,
       SUM(daily) OVER (
         ORDER BY order_date
         ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
       ) AS running_total
FROM (
  SELECT order_date, SUM(amount) AS daily
  FROM orders
  WHERE status = 'paid'
  GROUP BY order_date
) d
ORDER BY order_date;

Oppgave 8: Sammenhengende aktive dager

«Finn brukere med minst tre sammenhengende dager som inneholder en betalt ordre.» Dette er en variant av gaps-and-islands som bruker trikset med differansen mellom radnumre.

Hvis De trekker et radnummer per bruker fra datoen, får De en konstant verdi innenfor en sammenhengende serie. Da kan De gruppere etter denne verdien og telle. Dette signaliserer kompetanse på seniornivå.

WITH days AS (
  SELECT DISTINCT customer_id, order_date
  FROM orders WHERE status = 'paid'
),
grp AS (
  SELECT customer_id, order_date,
         order_date - (ROW_NUMBER() OVER (
           PARTITION BY customer_id ORDER BY order_date
         ) * INTERVAL '1 day') AS island
  FROM days
)
SELECT customer_id, COUNT(*) AS streak_len
FROM grp
GROUP BY customer_id, island
HAVING COUNT(*) >= 3;

Ytelse og vanlige fallgruver

Etter en korrekt spørring spør intervjuere: «Hvordan ville De gjort den raskere?» og ser etter klassiske fallgruver. Ha denne sjekklisten klar:

  • Indekser kolonnene som brukes i koblinger og filtre, for eksempel orders(customer_id, status), og unngå funksjoner på indekserte kolonner i WHERE.
  • Foretrekk EXISTS fremfor IN for store anti-joins; NOT IN med en NULL-verdi returnerer stille ingen resultater.
  • Filtrering av en kolonne fra en outer join i WHERE gjør den i praksis om til en inner join.
  • Legg alltid til en tie-breaker slik at topp-N-resultater blir deterministiske.
  • Kontroller EXPLAIN-planen for sekvensielle skanninger på store tabeller.

Hurtigsjekk

De trenger hver kundes eneste nyeste ordre, og to ordrer kan ha samme dato.

Oppsummering: Komplett sett med simulerte intervjuer

De har gått gjennom de vanligste intervjuproblemene fra ende til annen:

  • Aggregering + LIMIT for topp-N etter forbruk.
  • Anti-joins med NOT EXISTS (NULL-sikkert).
  • DENSE_RANK for den N-te høyeste verdien, ROW_NUMBER for nyeste per nøkkel og beste per gruppe.
  • LAG for måned-til-måned, SUM OVER for løpende totaler.
  • Trikset med radnummer for gaps-and-islands for å finne serier.
  • Avslutt hvert svar med å diskutere indekser, EXPLAIN og vanlige fallgruver.
Gratis å komme i gang

Lær deg Forberedelse til kodeintervjuer med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
90
Leksjoner
360

Ofte stilte spørsmål

Er leksjonen «Komplett sett med prøveoppgaver til intervju» gratis?

Ja – hele teksten i «Komplett sett med prøveoppgaver til intervju» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til kodeintervjuer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.

Hva lærer jeg i «Komplett sett med prøveoppgaver til intervju»?

Tidsbegrensede oppgaver fra start til slutt som kombinerer joiner, vindusfunksjoner og CTE-er under realistiske intervjubetingelser. Du øver på Forberedelse til kodeintervjuer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Forberedelse til kodeintervjuer?

Ingen tidligere erfaring er nødvendig. Forberedelse til kodeintervjuer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Komplett sett med prøveoppgaver til intervju»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Forberedelse til kodeintervjuer-leksjonen?

Ja. Alle Forberedelse til kodeintervjuer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Normalisering til 3NF
  2. ER-modellering og kardinalitet i relasjoner
  3. Stjerneskjema og utforming av datavarehus
  4. Komplett sett med prøveoppgaver til intervju
← Tilbake til Forberedelse til kodeintervjuer