GROUP BY

Yksi ongelmallisimmista asioista SQL-kyselyissä tuntuu olevan GROUP BY. Tällä sivulla on kerrottu muutama vinkki järkevien ryhmittelykyselyjen tekemiseen.

  1. GROUP BY on eri asia kuin ORDER BY ORDER BY järjestää kyselyn tulokset haluttuun järjestykseen esim. suuruusjärjestys tai aakkosjärjestys. GROUP BY taasen ryhmittelee kyselytuloksen rivit eikä missään nimessä järjestä. Jos hakutulos sattumalta on aakkosjärjestyksessä GROUP BY:n jälkeen niin se on vain silkkaa tuuria.

    Järjestäminen

    SELECT Nimi
    FROM Taulu
    ORDER BY Nimi
    

    Ryhmittely

    SELECT ID, COUNT(*)
    FROM Taulu
    GROUP BY ID
    
  2. GROUP BY -operaation käyttämisessä ei ole mitään järkeä jollei kyselyn lopputuloksessa käytetä yhteenvetofunktioita (SUM, MAX, MIN, AVG, COUNT). Mitä hyötyä on ryhmitellä kyselyn tulosta jos niillä ryhmillä ei ole tarkoitus tehdä mitään? Siis aina jos kyselyssä on GROUP BY -rivi niin kyselystä pitää löytyä ainakin yhden kerran SUM, MAX, MIN, AVG, COUNT.
  3. Kiinteästi GROUP BY -rivin kanssa kulkee HAVING jolla voidaan rajoittaa lopputulokseen tulevia ryhmiä. HAVING-lauseessa ei ole mitään järkeä ilman aiemmin mainittuja koostefunktioita koska HAVING kohdistuu aina ryhmään eli useaan tietueeseen kerralla. Jos lopputulosta pitää rajoittaa yksittäisen tietueen kentän sisällön perusteella niin tämä rajoitusehto laitetaan WHERE-osaan.
    SELECT ID, COUNT(*)
    FROM Taulu
    WHERE ID> 10				 -- Kelpuutetaan vain ne ID:t jotka ovat suurempia kuin 10
    GROUP BY ID          -- Tehdään ryhmät id-kentän perusteella
    HAVING COUNT(*)> 2  -- Otetaan lopputulokseen vain ne ryhmät joissa yli kaksi tietuetta
    

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/doc/tiedonhallinta/groupby/
© Antti Ekonoja (anjoekon@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2004-02-13 12:17:05
Informaatioteknologia - Jyväskylän yliopiston IT-tiedekunta ja avoin yliopisto