Valmistautuminen ohjelmointihaastatteluihin · Oppitunti

Sisäkkäisten kyselyjen uudelleenjärjestäminen CTE:iksi

Työhaastattelun yleinen tehtävä: muuta lukukelvoton sisäkkäinen kysely vaiheittaisiksi CTE:iksi

Oppitunti 4/413 vaihetta

Sisäkkäisten kyselyjen uudelleenjärjestäminen CTE:iksi on ilmainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Valmistautuminen ohjelmointihaastatteluihin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.

Refaktorointi live-työhaastattelussa

Tyypillinen keskitason haastattelutehtävä kuuluu näin: tässä on kysely, tehkää siitä luettava. Haastattelija antaa teille syvästi sisäkkäisen SELECT-kyselyn ja tarkkailee, miten pilkotte sen osiin. Sisäkkäisyyden muuttaminen nimettyjen CTE:iden sarjaksi on selkein ratkaisu.

Tässä oppitunnissa käydään läpi täsmälliset vaiheet, jotta voitte toimia rauhallisesti taululla.

Aloittakaa sisimmästä kyselystä

Sisäkkäiset alikyselyt suoritetaan käsitteellisesti sisältä ulospäin. Lukekaa siis kysely samalla tavalla: etsikää ensin syvimmällä oleva sulkeistettu SELECT. Se on ensimmäinen vaihe putkessa.

Antakaa sille kuvaava nimi ja siirtäkää se CTE:ksi. Kaikki, mikä viittasi aiempaan sisäiseen lohkoon, viittaa nyt CTE:n nimeen.

SELECT *
FROM (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
) t
WHERE t.total > 1000;

Yhden tason siirtäminen CTE:ksi

Ottakaa sisin johdettu taulu ja muuttakaa se CTE:ksi. Ulompi kysely pysyy ennallaan, paitsi että se hakee nyt nimetystä CTE:stä.

Tämä yksittäinen muutos poistaa jo yhden mentaalisen sisäkkäisyystason ja antaa vaiheelle merkityksellisen nimen.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;

Aidosti sisäkkäinen esimerkki

Tässä on vaikeampi refaktorointitapaus: kaksi sisäkkäisyystasoa ja korrelaation kaltainen suodatus. Tavoitteena on laskea suurimpaan kulutustasoon kuuluvien asiakkaiden tilausten keskiarvo.

Kysely toimii, mutta sitä on vaikea lukea. Puramme sen vaihe vaiheelta.

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
);

Ensimmäisen vaiheen nimeäminen

Syvin lohko laskee kunkin asiakkaan kokonaiskulutuksen. Siirtäkää se spend-nimiseksi CTE:ksi. Nyt keskimmäinen taso vain suodattaa tätä CTE:tä.

Huomatkaa, kuinka jokainen poiminta vähentää sisäkkäisyyttä yhdellä tasolla ja lisää itseään dokumentoivan nimen.

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
);

Toisen vaiheen nimeäminen

Poimikaa spend-suodatus omaksi CTE:ksi nimeltä big_spenders. Jäljelle jäävästä pääkyselystä tulee selkeästi nimetyn joukon kanssa tehtävä litteä liitos tai jäsenyystesti.

Jokaisella vaiheella on nyt yksi vastuu, mikä on siistin SQL:n tunnusmerkki.

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;

Semantiikan säilyttäminen refaktoroinnissa

Kultainen sääntö on, että refaktorointi ei saa muuttaa tuloksia. Varokaa ansoja, jotka muuttavat tulosta huomaamatta:

  • IN-ehdon vaihtaminen JOIN-liitokseen voi tuottaa kaksoisrivejä, jos oikea puoli ei ole erillinen.
  • NULL-arvoja sisältävä NOT IN toimii eri tavalla kuin NOT EXISTS.
  • Aggregoinnin tason on säilyttävä samana.

Lausukaa nämä riskit ääneen osoittaaksenne huolellisuutta.

Refaktoroinnin varmistaminen

Miten todistatte, että refaktorointi säilyttää alkuperäisen toiminnallisuuden? Mainitkaa, että ajaisitte molemmat versiot ja vertaisitte rivimääriä sekä tarkistussummaa tai vertaisitte otoksen tulosjoukkoja diffillä.

Haastattelussa jo se, että sanoisitte varmistaisin vertaamalla lukumääriä ja muutamaa yksittäistä riviä, osoittaa pelkkää syntaksin uudelleenkirjoittamista pidemmälle ulottuvaa suunnittelukuria.

SELECT COUNT(*), SUM(amount)
FROM orders
WHERE customer_id IN (SELECT customer_id FROM big_spenders);

Milloin EI pidä refaktoroida

Refaktorointi ei aina ole parannus. Yksi yksinkertainen alikysely voi olla selkeämpi sellaisenaan, ja jakaminen liian moneksi pieneksi CTE:ksi voi myös heikentää luettavuutta.

Arvioikaa tilanne: refaktoroikaa, kun sisäkkäisyys hämärtää tarkoituksen tai logiikkaa käytetään uudelleen. Kertokaa haastattelijalle, että lopettaisitte, kun kysely etenee ylhäältä alas selkeinä, nimettyinä vaiheina.

Refaktoroinnin tarkistuslista

Toistettava toimintatapa, jonka voitte kertoa:

  • Lukekaa sisältä ulospäin löytääksenne syvimmän alikyselyn.
  • Siirtäkää se nimetyksi CTE:ksi.
  • Toistakaa tämä ulospäin, yksi taso kerrallaan.
  • Nimetkää kukin vaihe sen tuottaman tuloksen mukaan.
  • Varmistakaa, etteivät tulokset muutu (varokaa IN/JOIN- ja NULL-ansoja).

Näin pelottava sisäkkäinen kysely muuttuu rauhalliseksi, vaiheittaiseksi uudelleenkirjoitukseksi.

Refaktoroinnista viestiminen

Puhukaa samalla, kun työskentelette: Sisin lohko laskee asiakaskohtaisen kulutuksen, joten kutsun sitä nimellä spend. Seuraava taso suodattaa paljon kuluttavat asiakkaat. Sitten uloin kysely laskee heidän tilaustensa keskiarvon.

Haastattelijat arvioivat viestintää yhtä paljon kuin oikeellisuutta. Vaiheittain ääneen selostettu refaktorointi osoittaa täsmälleen sitä keskitason osaamista, jota he etsivät.

Pikatarkistus

Tunnistakaa oikea ensimmäinen vaihe, kun syvästi sisäkkäinen kysely refaktoroidaan CTE:iksi.

Kertaus: refaktorointi CTE:iksi

Opitte rauhallisen, toistettavan refaktorointitavan: lukekaa sisältä ulospäin, siirtäkää syvin alikysely nimetyksi CTE:ksi ja edetkää ulospäin yksi taso kerrallaan.

  • Nimetkää kukin vaihe sen tuottaman tuloksen mukaan.
  • Säilyttäkää semantiikka; varokaa IN- ja JOIN-rakenteiden aiheuttamia duplikaatteja sekä NULL-ansoja.
  • Varmistakaa tulokset vertaamalla lukumääriä ja otoksen rivejä.
  • Älkää jakako kyselyä liian pieniin osiin; lopettakaa, kun kysely etenee selkeinä nimettyinä vaiheina.

CTE-kurssi on nyt suoritettu; osaatte refaktoroida luottavaisesti oikeassa haastattelutilanteessa.

Aloita maksutta

Opi Valmistautuminen ohjelmointihaastatteluihin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
90
Oppitunnit
360

Usein kysytyt kysymykset

Onko oppitunti ”Sisäkkäisten kyselyjen uudelleenjärjestäminen CTE:iksi” ilmainen?

Kyllä – oppitunnin ”Sisäkkäisten kyselyjen uudelleenjärjestäminen CTE:iksi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Valmistautuminen ohjelmointihaastatteluihin-kurssin, päivitä CoddyKit PROhon. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Sisäkkäisten kyselyjen uudelleenjärjestäminen CTE:iksi”?

Työhaastattelun yleinen tehtävä: muuta lukukelvoton sisäkkäinen kysely vaiheittaisiksi CTE:iksi Harjoittelet Valmistautuminen ohjelmointihaastatteluihin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Valmistautuminen ohjelmointihaastatteluihin-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Valmistautuminen ohjelmointihaastatteluihin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Sisäkkäisten kyselyjen uudelleenjärjestäminen CTE:iksi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Valmistautuminen ohjelmointihaastatteluihin-oppitunnilla?

Kyllä. Jokainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Ensimmäisen CTE:n kirjoittaminen
  2. Useiden CTE:iden ketjuttaminen
  3. CTE, alikysely vai väliaikainen taulu
  4. Sisäkkäisten kyselyjen uudelleenjärjestäminen CTE:iksi
← Takaisin: Valmistautuminen ohjelmointihaastatteluihin