Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Having-Lauseke | Ryhmittely
Keskitaso SQL

book
Having-Lauseke

Koulu on erittäin kiitollinen työstänne, ja nyt meillä on uusi tehtävä.

Kävi ilmi, että jotkut opiskelijat suorittivat lisäkokeita, kun heidän piti suorittaa vain yksi. Koulu epäilee heitä huijaamisesta, koska jokaisella opiskelijalla pitäisi olla vain yksi arvosana.

Meille on annettu tehtäväksi hankkia näiden opiskelijoiden sukunimet ja toimittaa ne koulun hallinnolle, jotta he voivat ryhtyä tarvittaviin toimenpiteisiin.

Mietitään yhdessä miten voimme tehdä tämän. Voisit aloittaa harkitsemalla, että voimme tehdä tämän käyttämällä WHERE-lausetta, ja se näyttäisi tältä:

SELECT student_surname
FROM student_grades
WHERE COUNT(grade) > 1
123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Mutta, kuten näet, saamme virheen, joka osoittaa, että emme voi käyttää aggregointifunktioita WHERE-lauseessa. Tässä tarvitsemme HAVING-lausetta.

Oletetaan, että meidän täytyy hakea osastot, joissa työntekijöiden keskimääräinen palkka on alle 70 000 dollaria vuodessa. Tämän saavuttamiseksi meidän on käytettävä aggregointifunktiota ja HAVING-lausetta:

SELECT department
FROM employees
GROUP BY department
HAVING AVG(salary) < 70000
1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Saimme vastauksena yhden osaston käyttämällä HAVING-lausetta, jossa asetimme ehdon sarakkeelle, jonka mukaan ryhmittelimme tiedot.

Huomio

Käyttääksemme tietojen aggregointia HAVING-lauseessa, meidän on oltava tietojen ryhmittely kyselyssämme. Kuten yllä olevassa kyselyssä, ryhmittelimme tiedot department-sarakkeen mukaan.

Katsotaanpa HAVING-lauseen yleisempää syntaksia ja milloin sitä on parasta käyttää:

sql
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Ymmärretään myös lyhyesti pääero WHERE- ja HAVING-lauseiden välillä ja milloin kumpaakin käytetään:

  1. WHERE-lausetta käytetään ennen tietojen aggregointia, kun taas HAVING-lausetta käytetään jälkeen tietojen aggregoinnin;

  2. WHERE-lause kirjoitetaan ennenGROUP BY-lausetta, kun taas HAVING-lause kirjoitetaan jälkeenGROUP BY-lausetta.

Nämä ovat kaksi pääeroa, jotka sinun on muistettava HAVING-lauseen onnistuneeseen käyttöön. Nyt palataan koulun meille antamaan tehtävään.

Tehtävä

Swipe to start coding

Tehtäväsi on hakea opiskelijoiden sukunimet, joilla on useita arvosanoja koulussa.

Sinun tarvitsee hakea vain opiskelijoiden sukunimet; ei tarvitse sisällyttää arvosanojen määrää vastaukseen. Käytä HAVING-lausetta ja COUNT()-yhteenvetofunktiota tämän tehtävän suorittamiseen. Järjestä sitten sukunimet aakkosjärjestykseen.

Huom:

Tuloksessa tulisi olla vain yksi sarake sukunimillä.

Lyhyet ohjeet

  • Hae student_surname-sarake.
  • Ryhmittele tiedot student_surname-sarakkeen mukaan.
  • Käytä HAVING-lausetta suodattamaan tulokset perustuen COUNT(grade) > 1.
  • Järjestä tulokset student_surname-sarakkeen mukaan.

Ratkaisu

SELECT student_surname
FROM student_grades
GROUP BY student_surname
HAVING COUNT(grade) > 1
ORDER BY student_surname;

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 6
single

single


Query ResultQuery Result
No query executed yet...

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

We use cookies to make your experience better!
some-alt