Tulosta

CASE -kuvaus

Tietokanta

SQL -kyselyt

Yleistä kyselyistä

Sarakkeiden valinta

Rivien valinta

Tarkka vastaavuus

Vertailuoperaattorit

Lajittelu

AND

BETWEEN - AND

OR

IN

LIKE

NOT

Tyhjä merkkijono

Boolen algebra

Sulutus

Päivämääräfunktiot

Liitokset

Perinteinen liitos

Sisäliitos

Laskenta

Sarakkeilla

Ryhmillä

Muut

Alikyselyt

Kyselyiden yhdistäminen

Laskenta ryhmillä

Kun haluat ryhmitellä tulosjoukon niin käytä GROUP BY -määrettä. Ryhmittelyn yhteydessä voit käyttää seuraavia laskentafunktioita:
- summa: SUM
- keskiarvo: AVG
- lukumäärä: COUNT
- minimiarvo MIN
- maksimiarvo: MAX.

Kaikkiin muihin funktioihin paitsi COUNTiin merkitset kentän, jonka haluat laskea. Esimerkiksi SUM(tons), AVG(tons), MIN(tons) ja MAX(tons) mutta COUNTin yhteydessä voit käyttää *-merkkiä: COUNT(*)

Syntaksi:

SELECT ryhmittelykenttä, laskentafunktiot
FROM taulu(t)
WHERE ehdot
GROUP BY ryhmittelykenttä

Kysely laskee laaduittain blokkien tonnimäärän, keskiarvon, keveimmän, painavimman ja lukumäärän
SELECT qualityID, SUM(tons) AS Tonnit, AVG(tons) As KA, MIN(tons) AS Kevein, MAX(tons) AS Painavin, COUNT(*) AS Lkm
FROM Block
GROUP BY qualityID;

Laskenta ilman ryhmittelyä

Ilman GROUP BY määrettä laskenta kohdistuu koko tauluun. Tällöin et käytä ryhmittelykenttääkään.

Kysely laskee varastossa olevien blokkien painon tonneissa ja lukumäärä 
SELECT SUM(tons) AS Tonnit, COUNT(*) AS Lkm
FROM Block;

Jos haluat laskea vain tiettyjen rivien tiedot niin käytä WHERE -lausetta:

Kysely laskee varastossa olevien KKARRED2 -laatua olevien blokkien painon tonneissa ja lukumäärä 
SELECT SUM(tons) AS Tonnit, COUNT(*) AS Lkm
FROM Block
WHERE qualityID = 'KKARRED2';;

Tulosjoukon rajaus

Tulosjoukkoa voit vielä rajata HAVING -lauseella, joka vastaa WHERE -lausetta mutta siinä voit myös hyödyntää koostefunktioita! GROUP BY-lausetta käytettäessä voidaan rajata tulosjoukkoa kahdella tavalla: * WHERE -lauseella valitaan rivit, jotka ryhmitellään * HAVING -lauseella valitaan tulosjoukosta halutut rivit

kysely laskee laatukohtaisen tonnimäärän ja ottaa mukaan ladut joita on ali 1000 tonnia
SELECT Q.name, SUM(tons) AS Tonnit
FROM Quality Q, Block B
WHERE Q.qualityID = B.qualityID
GROUP BY Q.name HAVING SUM(tons) < 1000

Muista, että

  • kaikki SELECT -listan ne sarakkeet, joissa ei ole funktiota, on lueteltava GROUP BY lauseessa
  • GROUP BY -lauseessa saa käyttää vain SELECT -listassa esiintyviä sarakenimiä (ei kaikissa tuotteissa välttämätöntä)
    ( (MySQLn uusin versio tosin sallii nämä... )

Eli seuraavat kyselyt ovat virheellisiä:

SELECT qualityID, locationID, SUM(tons) AS Tonnit
FROM Block
GROUP BY qualityID;

SELECT qualityID, SUM(tons) AS Tonnit
FROM Block
GROUP BY qualityID, locationID

 

Juha Kiukas - juha@kiukas.fi - 040 551 0711