Omstrukturera nästlade frågor till CTE:er
Ett mönster för liveintervjuer: omvandla en svårläst nästlad fråga till stegvisa CTE:er
Omstrukturera nästlade frågor till CTE:er är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.
Omstrukturering i en liveintervju
En vanlig fråga för en utvecklare på mellannivå: här är en fråga, gör den läsbar. Intervjuaren ger er en djupt nästlad SELECT och ser hur ni delar upp den. Att omvandla nästlingen till en sekvens av namngivna CTE:er är det renaste svaret.
Den här lektionen går igenom de exakta stegen så att ni kan göra det lugnt vid en whiteboard.
Börja med den innersta frågan
Nästlade underfrågor körs konceptuellt inifrån och ut. Läs därför också frågan inifrån och ut: hitta först den djupast nästlade SELECT-satsen inom parentes; det är ert första steg i pipelinen.
Ge den ett beskrivande namn och lyft ut den till en CTE. Allt som refererade till det inre blocket refererar nu i stället till CTE-namnet.
SELECT *
FROM (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
) t
WHERE t.total > 1000;Lyft ut en nivå till en CTE
Ta den innersta härledda tabellen och omvandla den till en CTE. Den yttre frågan förblir oförändrad, förutom att den nu hämtar data från den namngivna CTE:n.
Detta enda steg tar redan bort en nivå av mental nästling och ger steget ett meningsfullt namn.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;Ett verkligt nästlat exempel
Här är en svårare fråga att strukturera om: två nivåer av nästling samt ett korrelerat filter. Målet är det genomsnittliga ordervärdet bland kunder i den högsta utgiftsnivån.
Frågan är korrekt men svårläst. Vi ska plocka isär den steg för steg.
SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
SELECT customer_id
FROM (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
) s
WHERE s.total > 1000
);Namnge det första steget
Det djupaste blocket beräknar den totala summan per kund. Lyft ut det till en CTE som heter spend. Nu filtrerar mellanlagret helt enkelt denna CTE.
Observera hur varje extrahering minskar nästlingsdjupet med en nivå och lägger till ett självförklarande namn.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
SELECT customer_id FROM spend WHERE total > 1000
);Namnge det andra steget
Extrahera filtret på spend till en egen CTE, big_spenders. Den återstående huvudfrågan blir en platt sammanfogning eller ett medlemskapstest mot en tydligt namngiven mängd.
Varje steg har nu ett enda ansvar, vilket är kännetecknande för ren SQL.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders GROUP BY customer_id
),
big_spenders AS (
SELECT customer_id FROM spend WHERE total > 1000
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
JOIN big_spenders b ON b.customer_id = o.customer_id;Bevara semantiken vid omstrukturering
Den gyllene regeln: en omstrukturering får inte ändra resultaten. Var uppmärksam på fallgropar som i det tysta förändrar resultatet:
- Att byta från
INtill enJOINkan skapa duplicerade rader om den högra sidan inte är distinkt. NOT INmed NULL-värden fungerar annorlunda änNOT EXISTS.- Grupperingsnivån måste förbli densamma.
Nämn dessa risker högt för att visa noggrannhet.
Verifiera refaktoreringen
Hur bevisar Ni att refaktoreringen är semantiskt trogen? Nämn att Ni skulle köra båda versionerna och jämföra antalet rader och en kontrollsumma, eller jämföra resultatuppsättningarna rad för rad på ett urval.
I en intervju visar även en formulering som Jag skulle validera genom att jämföra antal rader och några enstaka kontrollrader en ingenjörsmässig noggrannhet som går utöver att bara skriva om syntaxen.
SELECT COUNT(*), SUM(amount)
FROM orders
WHERE customer_id IN (SELECT customer_id FROM big_spenders);När man INTE bör refaktorera
Refaktorering är inte alltid en förbättring. En enkel, grund underfråga kan vara tydligare om den lämnas som den är, och om man delar upp den i för många små CTE:er kan läsbarheten också försämras.
Använd omdömet: refaktorera när nästling döljer avsikten eller när logiken återanvänds. Berätta för intervjuaren att Ni skulle sluta när frågan kan läsas uppifrån och ned som tydliga, namngivna steg.
Checklistan för refaktorering
En metod att återge steg för steg:
- Läs inifrån och ut för att hitta den djupast nästlade underfrågan.
- Lyft ut den till en namngiven CTE.
- Upprepa utåt, ett lager i taget.
- Namnge varje steg efter vad det producerar.
- Bekräfta att resultaten är oförändrade (var uppmärksam på fällor med IN/JOIN och NULL).
Detta förvandlar en skrämmande nästlad fråga till en lugn omskrivning steg för steg.
Kommunicera Er refaktorering
Prata medan Ni arbetar: Det innersta blocket gäller utgifter per kund, så jag kallar det spend. Nästa lager filtrerar fram kunder med höga utgifter. Därefter beräknar den yttre frågan genomsnittet av deras orderbelopp.
Intervjuare bedömer kommunikationen lika mycket som korrektheten. En refaktorering som förklaras steg för steg visar tydligt den mognad på mellannivå som de söker.
Snabbtest
Identifiera det korrekta första steget när en djupt nästlad fråga refaktoriseras till CTE:er.
Sammanfattning: refaktorering till CTE:er
Ni har lärt Er en lugn och upprepningsbar refaktorering: läs inifrån och ut, lyft ut den djupaste underfrågan till en namngiven CTE och arbeta utåt ett lager i taget.
- Namnge varje steg efter vad det producerar.
- Bevara semantiken och var uppmärksam på dubbletter vid IN jämfört med JOIN samt NULL-fällor.
- Validera genom att jämföra antal rader och exempelrader.
- Dela inte upp för mycket; sluta när frågan kan läsas som tydliga, namngivna steg.
Det avslutar CTE-kursen; nu kan Ni refaktorera tryggt i en riktig intervju.
Lär dig Förberedelse inför kodningsintervjuer med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 90
- Lektioner
- 360
Vanliga frågor
Är lektionen ”Omstrukturera nästlade frågor till CTE:er” gratis?
Ja – hela texten till ”Omstrukturera nästlade frågor till CTE:er” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.
Vad lär jag mig i ”Omstrukturera nästlade frågor till CTE:er”?
Ett mönster för liveintervjuer: omvandla en svårläst nästlad fråga till stegvisa CTE:er Ni övar på Förberedelse inför kodningsintervjuer med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Förberedelse inför kodningsintervjuer?
Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Omstrukturera nästlade frågor till CTE:er”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Förberedelse inför kodningsintervjuer-lektionen?
Ja. Varje Förberedelse inför kodningsintervjuer-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Skriv din första CTE
- Kedja flera CTE:er
- CTE kontra underfråga kontra temporär tabell
- Omstrukturera nästlade frågor till CTE:er