Koostefunktiot ovat SQL-funktioita, jotka palauttavat yhteenvedon eli koosteen useista riveistä. Ne mahdollistavat esimerkiksi rivien lukumäärän, keskiarvon tai suurimman arvon laskemisen yhdellä lauseella. Tämä tekee koostefunktioista erityisen hyödyllisiä raportoinnissa, tilastoissa ja ryhmitellyn datan analysoinnissa.

SQL-kielen keskeisimmät koostefunktiot esitellään seuraavissa kappaleissa.

Kuinka noutaa SQL-kyselyn palauttamien rivien lukumäärä COUNT()-funktiolla?

COUNT-funktio laskee rivien määrän, jotka täyttävät annetun ehdon. Käytä sitä silloin, kun haluat selvittää, kuinka monta tietuetta täyttää asetetut kriteerit.


SELECT COUNT (*) AS LkmHintavälillä 
FROM Tuotteet
WHERE Hinta BETWEEN 10000 AND 50000;

COUNT-funktion kelvolliset parametrit ovat kentän nimi tai tähtimerkki (*). Ensimmäisessä tapauksessa COUNT palauttaa tulosjoukon rivien lukumäärän NULL-arvot poisluettuna. Jälkimmäisessä tapauksessa COUNT laskee tulosjoukon rivien määrän NULL-arvot mukaanlukien.

Tietokantamoottori hyödyntää COUNT-kyselyn optimoinnissa (nk.Query plan) tilastoja ja metadataa. Koska nämä arviot voivat poiketa todellisuudesta, tietokanta voi valita isolla datamäärällä hitaan suoritussuunnitelman. Voit välttää suorituskykyongelmat COUNT-kyselyissä tarkoilla WHERE-ehdoilla, pitämällä tilastot ajan tasalla sekä käyttämällä indeksivihjeitä. Näistä edistyneistä aiheista voit oppia lisää tarjoamassamme SQL-kyselyjen optimointi ja tuning -koulutuksessa.

Kuinka laskea numeeristen arvojen summa SQL:n SUM()-funktiolla?

SUM-funktio laskee määritetyn sarakkeen arvojen yhteenlasketun summan. Se laskee ainoastaan numeeriset arvot ja ohittaa NULL-arvot.


SELECT SUM (Hinta) AS Yhteishinta 
FROM Tuotteet;

Summafunktion tapauksessa yleisimmät kipukohdat liittyvät tietotyypin ylivuotoon sekä liukulukujen tarkkuuteen. Esimerkiksi jos summattavan sarakkeen tietotyyppi on pieni kokonaisluku (SMALLINT), ja summa ylittää kyseisen tyypin maksimiarvon (32 767), kysely palauttaa virheen, ellei tulosta kastata suurempaan tietotyyppiin:


SELECT SUM(CAST(Hinta AS BIGINT)) AS Yhteishinta  
FROM Tuotteet;

Jos taas summataan sarakkeita, joiden tyyppinä on epätarkka liukuluku (FLOAT tai REAL), tulokseen voi hiipiä pieniä pyöristysvirheitä (tyyliin 100.0000001 sen sijaan että olisi tarkka 100.00). Tästä syystä rahan ja tarkkojen arvojen kanssa tulisi käyttää aina DECIMAL- tai NUMERIC-tietotyyppejä.

Käsittelemme tietotyyppeihin ja kastaukseen liittyviä tilanteita tarkemmin SQL-kielen -koulutuksissamme.

Kuinka laskea keskiarvo SQL:n AVG()-funktiolla?

AVG-funktio laskee numeerisen sarakkeen aritmeettisen keskiarvon. Kuten muutkin koostefunktiot, se ohittaa NULL-arvot automaattisesti. Käytä AVG-funktiota erilaisten keskiarvojen seuraamiseen ja analysointiin.


SELECT AVG (Hinta) AS Keskihinta 
FROM Tuotteet;

Yleisin sudenkuoppa AVG-funktion käytössä liittyy NULL-arvoihin. Koska AVG jättää tyhjät rivit pois, sen avulla saatava keskiarvo voi olla vääristynyt. Jos tyhjät arvot halutaan laskea mukaan nollina, voi edellä olevan esimerkin kirjoittaa seuraavalla tavalla:


SELECT SUM(COALESCE(Hinta, 0)) * 1.0 / COUNT(*) AS TodellinenKeskihinta 
FROM Tuotteet;

Tähän aiheeseen ja sen vaikutuksiin raportoinnissa paneudutaan tarkemmin SQL-kielen perusteet -kurssilla

Kuinka löytää tulosjoukon isoin tai pienin arvo SQL:ssä MAX ja MIN funktioiden avulla?

MAX-funktio palauttaa sarakkeen suurimman arvon. Se toimii sekä numeerisilla että tekstiarvoilla, esimerkiksi suurin päivämäärä tai viimeinen aakkosissa oleva sana. NULL-arvot funktio ohittaa automaattisesti

SELECT MAX (Hinta) AS Suurinhinta 
FROM Tuotteet;

MIN-funktio kertoo sarakkeen pienimmän arvon. Kuten MAX-funktio, MIN-funktio soveltuu sekä numeerisille että tekstiarvoille.


SELECT MIN (Hinta) AS Pieninhinta 
FROM Tuotteet;

Suorituskyvyn kannalta on tärkeää varmistaa, että haettava sarake on indeksoitu. Tällöin tietokanta pystyy hakemaan arvon suoraan indeksin reunasta tekemättä hidasta taulun skannausta. Voit opiskella indeksien tehokasta hyödyntämistä SQL-koulutuksissamme eri alustoilla, kuten Microsoft Access, Microsoft SQL Server ja Mysql.