Valmistautuminen ohjelmointihaastatteluihin · Oppitunti

Ryhmien laskeminen ja suodattaminen

Etsi kynnysehdon täyttävät ryhmät, kuten asiakkaat, joilla on enemmän kuin N tilausta

Oppitunti 4/413 vaihetta

Ryhmien laskeminen ja suodattaminen 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.

Yleisin ryhmittelykysymys

”Etsikää asiakkaat, joilla on enemmän kuin N tilausta” on GROUP BY -työhaastattelutehtävien perusmalli. Muunnelmia esiintyy jatkuvasti: tuotteet, joita on myyty yli X kertaa, osastot, joilla on vähintään Y työntekijää, tai päivät, jolloin kirjautumisia on ollut yli Z.

Kaikissa on sama rakenne: ryhmittele, laske ja suodata sitten ryhmät HAVING-lausekkeella.

Ensimmäinen vaihe: laske ryhmittäin

Aloittakaa laskemalla rivit kussakin ryhmässä. Ryhmitelkää sen avaimen perusteella, joka määrittelee ”asiakkaan” tai ”tuotteen”, ja käyttäkää sitten COUNT(*)-funktiota.

Näin saatte yhden rivin ryhmää kohden ja näette sen koon. Ette ole vielä suodattaneet mitään, vaan ainoastaan mitanneet kunkin ryhmän.

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

Toinen vaihe: suodata HAVING-lausekkeella

Säilyttäkää nyt vain kynnysarvon täyttävät ryhmät. Ehto koskee aggregaattia, joten sen on oltava HAVING-lausekkeessa, ei WHERE-lausekkeessa.

Ajatelkaa se näin: ”ryhmittele tilaukset asiakkaan perusteella ja säilytä sitten asiakkaat, joiden tilausten määrä on suurempi kuin viisi”. Tämä on täydellinen vastaus klassiseen kysymykseen.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

COUNT(DISTINCT) ja kaikkien rivien laskeminen

Kiinnittäkää huomiota sanamuotoon. ”Asiakkaat, jotka tilasivat yli kolme eri tuotetta” edellyttää COUNT(DISTINCT product_id)-funktiota, ei COUNT(*)-funktiota.

  • COUNT(*) laskee ryhmän rivit.
  • COUNT(DISTINCT col) laskee yksilölliset ei-NULL-arvot.

Haastattelijat lisäävät kysymykseen sanoja ”eri” tai ”yksilöllinen” testatakseen, käytättekö DISTINCT-määrettä.

SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;

Suodatus SUM-funktion eikä COUNT-funktion perusteella

Sama rakenne toimii summien kanssa. ”Asiakkaat, jotka käyttivät yhteensä yli 1000” ryhmitellään asiakkaan perusteella ja suodatetaan SUM(amount)-arvon perusteella.

Mikä tahansa aggregaatti voi toimia HAVING-ehdon perustana: COUNT, SUM, AVG, MAX tai MIN. Kysymyksessä mainittu mittari kertoo, minkä aggregaatin perusteella suodatetaan.

SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Useita ryhmäehtoja

HAVING voi yhdistää ehtoja AND- ja OR-operaattoreilla, myös eri aggregaatteja käyttäen. ”Asiakkaat, joilla on yli viisi tilausta JA joiden tilausten keskiarvo on yli 100” voidaan ilmaista yhdessä HAVING-lausekkeessa.

Kukin ehto viittaa omaan aggregaattiinsa, ja kaikki ehdot arvioidaan ryhmittelyn jälkeen. Tämä osoittaa, että osaatte ilmaista yhdistetyt liiketoimintasäännöt selkeästi.

SELECT customer_id,
       COUNT(*) AS orders,
       AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;

WHERE- ja HAVING-lausekkeiden yhdistäminen

Usein rivit on suodatettava ennen laskemista. ”Tänä vuonna tehdyistä tilauksista asiakkaat, joilla on yli viisi tilausta” käyttää päivämäärän suodattamiseen WHERE-lauseketta ja lukumäärän suodattamiseen HAVING-lauseketta.

WHERE pienentää rivijoukkoa ensin, minkä jälkeen ryhmittely ja HAVING-kynnysarvo käsittelevät sitä. Molempien lausekkeiden käyttäminen oikein samassa kyselyssä osoittaa keskitason osaamista.

SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;

Duplikaattien etsiminen

Läheinen käyttötapaus on ”etsikää päällekkäiset sähköpostiosoitteet”. Ryhmitelkää sen sarakkeen perusteella, jonka pitäisi olla yksilöllinen, ja säilyttäkää ryhmät, joissa lukumäärä on suurempi kuin yksi.

Tämä yksittäinen malli tunnistaa päällekkäiset avaimet, toistuvat tapahtumat tai minkä tahansa arvon, joka esiintyy useammin kuin pitäisi. Haastattelijat kysyvät tätä testatakseen, ymmärrättekö ryhmittelyn työkaluna duplikaattien tunnistamiseen.

SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Ryhmät, joissa on täsmälleen haluttu määrä

Kynnysarvo ei aina tarkoita ehtoa ”suurempi kuin”. ”Asiakkaat, joilla on täsmälleen yksi tilaus” ilmaistaan ehdolla HAVING COUNT(*) = 1; ”vähintään 3” ehdolla >= 3.

Kuunnelkaa tehtävänannosta rajan ilmaisevaa sanaa: ”enemmän kuin”, ”vähintään”, ”täsmälleen” tai ”vähemmän kuin”. Kukin niistä vastaa eri vertailuoperaattoria, ja haastattelijat testaavat, osaatteko olla näin täsmällinen.

-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;

Vain avainten palauttaminen

Joskus tehtävänannossa halutaan vain ehdon täyttävät tunnisteet, ei lukumääriä – usein toisen kyselyn syötteeksi. Ryhmittelette ja suodatatte silti, mutta valitsette SELECT-lauseessa vain avaimen.

Voitte sitten kääriä tämän IN-alilausekkeeksi tai käyttää liitosta täydellisten tietojen hakemiseen näille asiakkaille. Tällaisen yhdistelyn hallinta on senioritason osaamista.

SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Haastattelun toimintamalli

Kun tehtävässä kysytään kynnysarvon täyttävistä ryhmistä, käykää ääneen läpi neljä vaihetta: (1) tunnistakaa ryhmittelyavain, (2) valitkaa aggregoitava suure, (3) päättäkää vertailuoperaattori tehtävänannon sanamuodon perusteella, (4) sijoittakaa rivisuodattimet WHERE-lauseeseen ja aggregaattisuodatin HAVING-lauseeseen.

Tämä malli ratkaisee koko laskenta- ja suodatusongelmien joukon.

Pikatesti

Valitkaa tehtävänantoon sopiva kysely.

Kertaus

Malli: ryhmittele avaimen mukaan, aggregoi ja suodata ryhmiä HAVING-lauseella. Tämä ratkaisee tehtävät, joissa etsitään ”yli N tilausta”, eniten kuluttavia asiakkaita, kaksoiskappaleita tai vain kerran ostaneita asiakkaita.

  • Käyttäkää COUNT(*)-funktiota rivien laskemiseen ja COUNT(DISTINCT col)-funktiota yksilöllisten arvojen laskemiseen.
  • Sovittakaa vertailuoperaattori tehtävänannon sanamuotoon.
  • Rivisuodattimet kuuluvat WHERE-lauseeseen ja aggregaattisuodattimet HAVING-lauseeseen.
  • Valitkaa SELECT-lauseessa vain avain, jos haluatte käyttää tulosta IN-alilausekkeessa tai liitoksessa.
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 ”Ryhmien laskeminen ja suodattaminen” ilmainen?

Kyllä – oppitunnin ”Ryhmien laskeminen ja suodattaminen” 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 ”Ryhmien laskeminen ja suodattaminen”?

Etsi kynnysehdon täyttävät ryhmät, kuten asiakkaat, joilla on enemmän kuin N tilausta 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 ”Ryhmien laskeminen ja suodattaminen”-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. SELECT-sarakkeiden GROUP BY -sääntö
  2. HAVING ja WHERE
  3. Ryhmittely useiden sarakkeiden ja lausekkeiden perusteella
  4. Ryhmien laskeminen ja suodattaminen
← Takaisin: Valmistautuminen ohjelmointihaastatteluihin