Valmistautuminen ohjelmointihaastatteluihin · Oppitunti

Lajittelu lausekkeiden ja aliasten perusteella

Missä aliasviittaukset ovat sallittuja ORDER BY -lausekkeessa ja miten lajitellaan lasketun logiikan perusteella

Oppitunti 4/413 vaihetta

Lajittelu lausekkeiden ja aliasten perusteella 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.

ORDER BY on luultua joustavampi

Yllättävän moni hakija uskoo, että ORDER BY voi viitata vain tavallisiin sarakkeisiin. Todellisuudessa voit lajitella lausekkeiden, aliasten, sarakepaikkojen ja CASE-logiikan perusteella.

Haastattelijat käyttävät tätä testatakseen, ymmärrätkö kyselyn loogisen suoritusjärjestyksen, sillä ORDER BY suoritetaan SELECT-lauseen jälkeen. Juuri siksi aliakset toimivat tässä mutta eivät WHERE-lausekkeessa.

Miksi aliakset ovat sallittuja ORDER BY -lausekkeessa

Palauta mieleen looginen suoritusjärjestys: FROM, WHERE, GROUP BY, HAVING, SELECT ja lopuksi ORDER BY. Koska SELECT suoritetaan ennen ORDER BY-lauseketta, SELECT-lausekkeessa määritellyt sarakealiakset ovat jo olemassa, kun ORDER BY arvioidaan.

Juuri tästä syystä alias toimii ORDER BY-lausekkeessa mutta ei WHERE-lausekkeessa. Haastattelijat yhdistävät tämän mielellään suoritusjärjestystä koskevaan kysymykseen.

SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY annual_pay DESC;

Lajittelu raakalausekkeen perusteella

Koko lausekkeen voi myös toistaa ORDER BY-lausekkeessa aliaksen käyttämisen sijaan. Molemmat ovat kelvollisia, ja tulos on sama.

Aliaksen käyttö on selkeämpää ja välttää logiikan toistamisen, mutta jotkin tiimit suosivat eksplisiittistä lauseketta selkeyden vuoksi. Haastattelussa kumpikin vastaus hyväksytään, kunhan valinta perustellaan.

SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY salary * 12 DESC;

Lajittelu sarakepaikan perusteella (ordinal)

Voit lajitella SELECT-luettelon alkion järjestysnumeron perusteella: ORDER BY 2 lajittelee toisena valitun sarakkeen mukaan. Menetelmä on tiivis mutta hauras, koska SELECT-luettelon järjestyksen muuttaminen muuttaa lajittelua huomaamatta.

Haastatteluvinkki: on hyvä tietää, että tämä on mahdollista, mutta tuotantokoodissa sitä yleensä vältetään luettavuuden ja turvallisuuden vuoksi.

SELECT name, hire_date
FROM employees
ORDER BY 2 DESC;

Lajittelu lasketun CASE-lausekkeen perusteella

Tehokas malli on lajitella CASE-lausekkeen perusteella, jotta voidaan määrittää mukautettu, ei-aakkosellinen järjestys. Tässä nostamme parhaiten ansaitsevat ensin johdetun prioriteetin avulla.

CASE tuottaa lajittelusijan, jolle ei ole omaa saraketta; moottori arvioi sen yksinomaan lajittelua varten.

SELECT name, salary
FROM employees
ORDER BY CASE WHEN salary >= 100000 THEN 0 ELSE 1 END,
         salary DESC;

Mukautettu luokkien järjestys

Tilaa kuvaavat sarakkeet harvoin lajittelevat mielekkäästi aakkosjärjestyksessä. "active, pending, closed" aakkostuu muotoon "active, closed, pending", mikä on väärin. CASE yhdistää kunkin arvon tarkoituksellisesti määritettyyn sijoitukseen.

Tämä on yleinen raportointivaatimus ja selkeä tapa osoittaa, että järjestystä voi hallita luonnollista lajittelua monipuolisemmin.

SELECT id, status
FROM orders
ORDER BY CASE status
           WHEN 'active'  THEN 1
           WHEN 'pending' THEN 2
           WHEN 'closed'  THEN 3
           ELSE 4
         END;

Lajittelu funktion palauttaman arvon perusteella

Mikä tahansa skalaariarvoinen funktio toimii ORDER BY-lausekkeessa. Voit esimerkiksi lajitella kirjainkoosta riippumatta käyttämällä LOWER-funktiota tai lajitella merkkijonon pituuden tai päivämäärän osan perusteella.

Huomaa: sarakkeen kääriminen funktion sisään lajittelun aikana voi estää moottoria käyttämästä kyseisen sarakkeen indeksiä, aivan kuten WHERE-lausekkeessa.

SELECT name
FROM employees
ORDER BY LOWER(name) ASC;

Aliakset ja aggregaatit GROUP BY -kyselyissä

Ryhmitellyssä kyselyssä lajitellaan usein aggregaatin perusteella. Aggregaatin aliakseen voi viitata ORDER BY-lausekkeessa, jälleen siksi, että SELECT suoritetaan ensin.

Alla oleva kysely laskee tilaukset asiakasta kohden ja lajittelee määrän laskevasti käyttäen aliasta order_count.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
ORDER BY order_count DESC;

Aliaksen ja sarakkeen nimen törmäyksen sudenkuoppa

Haastattelijoiden suosima erikoistapaus: entä jos aliaksella on sama nimi kuin todellisella sarakkeella? Useimmat moottorit tulkitsevat paljaan nimen ORDER BY-lausekkeessa ensisijaisesti valintaluettelon aliakseksi, mikä voi yllättää.

Jos annat lausekkeelle salary * 2 AS salary aliakseksi nimen salary ja käytät sitten ORDER BY salary, lajittelet kaksinkertaistetun arvon etkä alla olevan sarakkeen perusteella. Vältä sarakenimien käyttämistä uudelleen aliaksina, jotta tämä epäselvyys ei synny.

SELECT salary * 2 AS salary
FROM employees
ORDER BY salary;

Lausekkeiden ja lajittelusuuntien yhdistäminen

Voit yhdistää kaikki nämä samassa lausekkeessa: ensin lausekkeen, sitten aliaksen ja lopuksi tavallisen sarakkeen, joilla kullakin on oma lajittelusuuntansa. Esimerkissä lajitellaan lasketun bonusluokan mukaan laskevasti ja sitten nimen mukaan nousevasti tasatilanteen ratkaisijana.

Tällaisten lajitteluavainten ketjuttaminen on todellisten raportointikyselyiden perusasia.

SELECT name, salary,
       salary * 0.1 AS bonus
FROM employees
ORDER BY bonus DESC, name ASC;

Siirrettävyyttä koskevat huomautukset

Vaikka lausekkeita ja aliaksia tuetaan ORDER BY-lausekkeessa laajasti, haastatteluissa kannattaa huomioida muutama seikka:

  • Järjestysnumerot (ORDER BY 2) ovat standardin mukaisia, mutta niitä ei suositella.
  • Aliasten näkyvyys ORDER BY-lausekkeessa on yhtenäinen tärkeimmissä moottoreissa toisin kuin WHERE/HAVING-lausekkeissa.
  • SELECT DISTINCT asettaa rajoituksen: ORDER BY-lausekkeessa voi käyttää vain valintaluettelossa esiintyviä lausekkeita.

Pikatarkistus

Yhdistä aliasten näkyvyys suoritusjärjestykseen.

Kertaus

Lajittelu lausekkeiden ja aliasten perusteella:

  • ORDER BY hyväksyy aliakset, raakailmaukset, funktiot, CASE-logiikan ja järjestysnumerot.
  • Aliakset toimivat, koska loogisessa käsittelyjärjestyksessä ORDER BY suoritetaan SELECT-lauseen jälkeen.
  • Käyttäkää CASE-lausetta mukautettuun kategoriseen järjestykseen.
  • Välttäkää aliaksia, joiden nimet ovat samat kuin todellisten sarakkeiden nimet, jotta epäselvyyksiltä vältytään.
  • Lajitteluavaimen funktiot voivat estää indeksin käytön.
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 ”Lajittelu lausekkeiden ja aliasten perusteella” ilmainen?

Kyllä – oppitunnin ”Lajittelu lausekkeiden ja aliasten perusteella” 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 ”Lajittelu lausekkeiden ja aliasten perusteella”?

Missä aliasviittaukset ovat sallittuja ORDER BY -lausekkeessa ja miten lajitellaan lasketun logiikan perusteella 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 ”Lajittelu lausekkeiden ja aliasten perusteella”-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. Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu
  2. LIMIT, OFFSET ja FETCH FIRST
  3. Top-N-rivien luotettava palauttaminen
  4. Lajittelu lausekkeiden ja aliasten perusteella
← Takaisin: Valmistautuminen ohjelmointihaastatteluihin