DISTINCT vai GROUP BY yksikäsitteisyyden saavuttamiseksi
Milloin DISTINCT on oikea vastaus ja milloin haastattelija odottaa GROUP BY -lauseketta
DISTINCT vai GROUP BY yksikäsitteisyyden saavuttamiseksi on ilmainen SQL-työhaastatteluun valmistautuminen-oppitunti CoddyKitissä. Tämä on oppitunti 3/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 SQL-työhaastatteluun valmistautuminen-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL-työhaastatteluun valmistautuminen-kurssilla on yhteensä 4 oppituntia.
Mitä DISTINCT tekee
DISTINCT poistaa päällekkäiset rivit. Haastatteluissa tarkistetaan erityisesti tämä: se toimii koko valitulla rivillä, ei vain yhdellä sarakkeella — joten SELECT DISTINCT a, b poistaa päällekkäisyydet (a, b)-pareittain.
SELECT DISTINCT department
FROM employees;DISTINCT kattaa kaikki valitut sarakkeet
Kun sarakkeita on useita, DISTINCT säilyttää jokaisen yksilöllisen yhdistelmän — yhden rivin kutakin erilaista (department, job_title) -paria kohden. Yhden sarakkeen deduplikointiin ei ole standardin mukaista tapaa.
SELECT DISTINCT department, job_title
FROM employees;Mitä GROUP BY tekee
GROUP BY yhdistää saman avaimen jakavat rivit yhdeksi riviksi ryhmää kohden. Pelkkä sarakkeen mukaan ryhmittely tuottaa saman tuloksen kuin DISTINCT kyseisessä sarakkeessa.
SELECT department
FROM employees
GROUP BY department;
-- equivalent to:
SELECT DISTINCT department
FROM employees;Todellinen ero: aggregointi
Milloin ne siis eroavat toisistaan? Silloin, kun tarvitaan aggregaattia. GROUP BY voi laskea COUNT-, SUM- tai AVG-arvon ryhmittäin, mutta DISTINCT ei. Tarvitaanko yksilöllisiä rivejä? DISTINCT. Tarvitaanko ryhmäkohtainen mittari? GROUP BY.
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;DISTINCT ei laske ryhmäkohtaisia määriä
DISTINCT-lausekkeeseen ei voi vain liittää laskentaa. Kun kysytään, "kuinka monta työntekijää kussakin osastossa on", oikea työkalu on aina GROUP BY yhdessä COUNT(*)-funktion kanssa — ei SELECT DISTINCT.
-- WRONG intent: this errors or returns one total row
-- SELECT DISTINCT department, COUNT(*) FROM employees;
-- RIGHT:
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;COUNT(DISTINCT) yhdistää molemmat ideat
Suosittu yhdistelmä on COUNT(DISTINCT col), joka laskee yksilölliset arvot kussakin ryhmässä. Tässä DISTINCT on aggregaattifunktion sisällä ja vastaa kysymykseen "kuinka monta eri tehtävänimikettä kussakin osastossa on?"
SELECT department,
COUNT(DISTINCT job_title) AS distinct_titles
FROM employees
GROUP BY department;Yksilöllisten arvojen laskeminen kokonaisuutena
Ilman GROUP BY -lauseketta COUNT(DISTINCT col) laskee yksilölliset arvot koko taulusta — tämä vastaa selkeästi kysymykseen "kuinka monta eri osastoa meillä on?"
SELECT COUNT(DISTINCT department) AS n_departments
FROM employees;
-- equivalently, count the deduped subquery
SELECT COUNT(*)
FROM (SELECT DISTINCT department FROM employees) d;Suorituskyky on usein sama
Kumpi on nopeampi, DISTINCT vai GROUP BY? Pelkän deduplikoinnin tapauksessa ne ovat yleensä yhtä tehokkaita — kyselyoptimoijat suunnittelevat ne samalla tavalla. Valitkaa käyttötarkoituksen mukaan: DISTINCT yksilöllisille riveille ja GROUP BY aggregointiin.
DISTINCT ja NULL
Miten DISTINCT käsittelee NULL-arvot? Se pitää kaikkia NULL-arvoja samanarvoisina, joten useat NULL-rivit yhdistyvät yhdeksi. GROUP BY toimii samoin — NULL-arvot muodostavat yhden ryhmän.
-- If manager_id has several NULLs, this returns one NULL row
SELECT DISTINCT manager_id
FROM employees;Postgresin DISTINCT ON (bonus)
Bonuksena Postgres tarjoaa standardista poikkeavan DISTINCT ON (expr) -rakenteen, joka säilyttää ensimmäisen rivin kutakin avainta kohden ORDER BY -lausekkeen määrittämässä järjestyksessä. Siirrettävässä koodissa käytetään sen sijaan ROW_NUMBER()-funktiota.
-- Postgres only: latest order per customer
SELECT DISTINCT ON (customer_id) customer_id, order_id, order_date
FROM orders
ORDER BY customer_id, order_date DESC;DISTINCT koskee koko SELECT-lauseketta, ei yhtä saraketta
Vielä yksi sudenkuoppa: DISTINCT toimii koko rivillä, joten SELECT DISTINCT customer_id, order_date ei palauta yhtä riviä asiakasta kohden. Käyttäkää siihen GROUP BY -lauseketta yhdessä MAX-funktion tai ikkunafunktion kanssa.
-- Does NOT give one row per customer
SELECT DISTINCT customer_id, order_date FROM orders;
-- One row per customer: latest order date
SELECT customer_id, MAX(order_date) AS last_order
FROM orders
GROUP BY customer_id;Pikatarkistus
Valitkaa oikea työkalu.
Kertaus
Kertaus: DISTINCT poistaa päällekkäiset kokonaiset rivit, kun taas GROUP BY yhdistää rivit avaimen perusteella ja mahdollistaa aggregaatit. COUNT(DISTINCT col) laskee yksilölliset arvot, molemmat käsittelevät NULL-arvot yhtenä arvona, ja suorituskyky on yleensä sama.
Opi SQL 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
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”DISTINCT vai GROUP BY yksikäsitteisyyden saavuttamiseksi” ilmainen?
Kyllä – oppitunnin ”DISTINCT vai GROUP BY yksikäsitteisyyden saavuttamiseksi” 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 SQL-työhaastatteluun valmistautuminen-kurssin, päivitä CoddyKit PROhon. SQL-työhaastatteluun valmistautuminen-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”DISTINCT vai GROUP BY yksikäsitteisyyden saavuttamiseksi”?
Milloin DISTINCT on oikea vastaus ja milloin haastattelija odottaa GROUP BY -lauseketta Harjoittelet SQL-työhaastatteluun valmistautuminen-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL-työhaastatteluun valmistautuminen-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL-työhaastatteluun valmistautuminen-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”DISTINCT vai GROUP BY yksikäsitteisyyden saavuttamiseksi”-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ä SQL-työhaastatteluun valmistautuminen-oppitunnilla?
Kyllä. Jokainen SQL-työhaastatteluun valmistautuminen-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
- Sarakkeiden projisointi ja aliasten sudenkuopat
- Lasketut sarakkeet ja lausekkeiden prioriteetti
- DISTINCT vai GROUP BY yksikäsitteisyyden saavuttamiseksi
- CASE-lausekkeet SELECTissä