Max ehtona sql:ssä. SQL-koontifunktiot - SUM, MIN, MAX, AVG, COUNT. GROUP BY lauseke

Opitaan tekemään yhteenveto. Ei, nämä eivät ole SQL:n tutkimisen tuloksia, vaan tietokantataulukoiden sarakkeiden arvojen tuloksia. SQL-koontifunktiot toimivat sarakearvoilla tuottaen yhden tuloksena olevan arvon. Yleisimmin käytetyt SQL-koontifunktiot ovat SUM, MIN, MAX, AVG ja COUNT. On tarpeen erottaa kaksi aggregaattifunktioiden käyttötapausta. Ensinnäkin yhdistelmäfunktioita käytetään yksinään ja ne palauttavat yhden tuloksena olevan arvon. Toiseksi aggregaattifunktioita käytetään SQL GROUP BY -lauseen kanssa, toisin sanoen ryhmittely kenttien (sarakkeiden) mukaan kunkin ryhmän tuloksena olevien arvojen saamiseksi. Tarkastellaan ensin tapauksia, joissa aggregaattifunktioita käytetään ilman ryhmittelyä.

SQL SUM -funktio

SQL SUM -funktio palauttaa tietokantataulukon sarakkeen arvojen summan. Sitä voidaan käyttää vain sarakkeissa, joiden arvot ovat numeroita. SQL-kyselyt tuloksena olevan summan saamiseksi alkavat näin:

VALITSE SUMMA (COLUMN_NAME)...

Tätä lauseketta seuraa FROM (TABLE_NAME), ja sitten ehto voidaan määrittää WHERE-lauseella. Lisäksi sarakkeen nimeä voi edeltää DISTINCT, mikä tarkoittaa, että vain yksilölliset arvot lasketaan. Oletusarvoisesti kaikki arvot otetaan huomioon (tätä varten voit määrittää ei DISTINCT, vaan ALL, mutta sanaa ALL ei vaadita).

Esimerkki 1. Siellä on yritystietokanta, joka sisältää tiedot sen toimialoista ja työntekijöistä. Henkilöstötaulukossa on kaiken muun lisäksi sarake työntekijöiden palkoista. Valinta taulukosta näyttää tältä (kuvaa saa suuremmaksi klikkaamalla sitä hiiren vasemmalla painikkeella):

Saat kaikkien palkkojen summan käyttämällä seuraavaa kyselyä:

VALITSE SUMMA (Palkka) Henkilökunnalta

Tämä kysely palauttaa arvon 287664.63.

Ja nyt . Harjoituksissa alamme jo monimutkaista tehtäviä ja lähennämme niitä käytännössä.

SQL MIN -toiminto

SQL MIN -toiminto toimii myös sarakkeissa, joiden arvot ovat numeroita, ja palauttaa sarakkeen kaikista arvoista minimin. Tällä funktiolla on samanlainen syntaksi kuin SUM-funktiolla.

Esimerkki 3. Tietokanta ja taulukko ovat samat kuin esimerkissä 1.

Meidän on selvitettävä osaston numero 42 työntekijöiden vähimmäispalkka. Tee tämä kirjoittamalla seuraava pyyntö:

Kysely palauttaa arvon 10505.90.

Ja uudelleen harjoituksia itseratkaisuun. Tässä ja joissakin muissa harjoituksissa tarvitset henkilöstötaulukon lisäksi myös Org-taulukon, joka sisältää tiedot yrityksen toimialoista:


Esimerkki 4. Henkilökunta-taulukkoon lisätään Organisaatio-taulukko, joka sisältää tiedot yrityksen osastoista. Tulosta yhden työntekijän vähimmäistyövuosien Bostonissa sijaitsevalla osastolla.

SQL MAX -toiminto

SQL MAX -toiminto toimii samalla tavalla ja sillä on samanlainen syntaksi, jota käytetään, kun sinun on määritettävä suurin arvo sarakkeen kaikkien arvojen joukosta.

Esimerkki 5.

Sinun on selvitettävä osaston numero 42 työntekijöiden enimmäispalkka. Tee tämä kirjoittamalla seuraava pyyntö:

Kysely palauttaa arvon 18352.80

On aika harjoituksia itsenäiseen ratkaisuun.

Esimerkki 6. Työskentelemme jälleen kahden pöydän kanssa - Staff ja Org. Näytä osaston nimi ja yhden työntekijän saaman välityspalkkion enimmäisarvo osastoryhmään (Divisioona) kuuluvalla osastolla. Käyttää LIITY (pöytien liittäminen) .

SQL AVG -toiminto

Se, mitä sanotaan edellisten funktioiden syntaksista, pätee myös SQL AVG -funktiolle. Tämä funktio palauttaa sarakkeen kaikkien arvojen keskiarvon.

Esimerkki 7. Tietokanta ja taulukko ovat samat kuin edellisissä esimerkeissä.

Oletetaan, että haluat selvittää osaston numero 42 työntekijöiden keskimääräisen palvelusajan. Tee tämä kirjoittamalla seuraava kysely:

Tuloksena 6.33

Esimerkki 8. Työskentelemme yhden pöydän kanssa - Henkilökunta. Näytä 4–6 vuoden kokemuksen omaavien työntekijöiden keskipalkka.

SQL COUNT -toiminto

SQL COUNT -funktio palauttaa tietokantataulukon tietueiden määrän. Jos määrität kyselyssä SELECT COUNT(COLUMN_NAME) ..., tuloksena on tietueiden lukumäärä ottamatta huomioon niitä tietueita, joissa sarakkeen arvo on NULL (määrittämätön). Jos käytät tähteä argumenttina ja aloitat SELECT COUNT(*) ... -kyselyn, tuloksena on taulukon kaikkien tietueiden (rivien) lukumäärä.

Esimerkki 9. Tietokanta ja taulukko ovat samat kuin edellisissä esimerkeissä.

Haluat tietää kaikkien palkkioita saavien työntekijöiden lukumäärän. Niiden työntekijöiden lukumäärä, joiden Comm-sarakkeen arvot eivät ole NULL-arvoja, palautetaan seuraavalla kyselyllä:

SELECT COUNT (Comm) FROM Henkilökunnalta

Tuloksena on 11.

Esimerkki 10. Tietokanta ja taulukko ovat samat kuin edellisissä esimerkeissä.

Jos haluat selvittää taulukon tietueiden kokonaismäärän, käytä COUNT-funktion argumenttina kyselyä, jossa on tähti:

VALITSE LUKEMINEN (*) Henkilökunnalta

Tuloksena on 17.

Seuraavassa harjoitus itsenäiseen ratkaisuun sinun on käytettävä alikyselyä.

Esimerkki 11. Työskentelemme yhden pöydän kanssa - Henkilökunta. Näytä suunnitteluosaston työntekijöiden lukumäärä (Plains).

Koontifunktiot SQL GROUP BY:n avulla

Tarkastellaan nyt koontifunktioiden käyttöä yhdessä SQL GROUP BY -käskyn kanssa. SQL GROUP BY -käskyä käytetään tulosarvojen ryhmittelyyn tietokantataulukon sarakkeiden mukaan. Sivustolla on tälle operaattorille erikseen omistettu oppitunti .

Esimerkki 12. Ilmoitusportaalista on tietokanta. Siinä on Mainokset-taulukko, joka sisältää tiedot viikon lähetetyistä mainoksista. Luokka-sarake sisältää tietoja suurista mainosluokista (esimerkiksi Kiinteistöt) ja Osat-sarake sisältää tiedot luokkiin kuuluvista pienemmistä osista (esim. Asunnot ja kesämökit -osat ovat osa Kiinteistöt-luokkaa). Yksiköt-sarakkeessa on tiedot lähetettyjen ilmoitusten määrästä ja Raha-sarakkeesta tiedot ilmoitusten lähettämisestä saaduista rahamääristä.

KategoriaOsaYksikötRaha
KuljetusAutot110 17600
KiinteistötHuoneistot89 18690
KiinteistötDachas57 11970
KuljetusMoottoripyörät131 20960
RakennusmateriaalitTaulut68 7140
Sähkötekniikkatelevisiot127 8255
SähkötekniikkaJääkaapit137 8905
RakennusmateriaalitRegips112 11760
VapaaKirjat96 6240
KiinteistötKotona47 9870
VapaaMusiikki117 7605
VapaaPelit41 2665

Selvitä SQL GROUP BY -käskyn avulla, kuinka paljon rahaa ansait julkaisemalla mainoksia kussakin luokassa. Kirjoitamme seuraavan pyynnön:

VALITSE Luokka, SUMMA (Raha) Rahana mainoksista GROUP BY Kategoria

Esimerkki 13. Tietokanta ja taulukko ovat samat kuin edellisessä esimerkissä.

Selvitä SQL GROUP BY -käskyn avulla, missä kunkin luokan osassa oli eniten luetteloita. Kirjoitamme seuraavan pyynnön:

VALITSE luokka, osa, MAX (yksikköä) AS enimmäismäärä mainoksista GROUP BY luokka

Tuloksena on seuraava taulukko:

Kokonais- ja yksittäiset arvot voidaan saada yhdessä taulukossa kyselyn tulosten yhdistäminen UNION-operaattorilla .

Relaatiotietokannat ja SQL-kieli

Tämän SQL-kyselyjen oppimisvaiheen vaiheet on suunniteltu osoittamaan, että SQL ei voi vain tehdä monimutkaisia ​​valintoja ja lajitella tietoja, vaan myös laskea matemaattisten funktioiden tulokset, suorittaa tekstin muunnoksia, ryhmitellä tietueita jne. Tarkemmin sanottuna SQL ei voi tehdä kaikkea tätä, vaan ne, jotka tukevat sitä. SQL standardeineen muotoilee vain vaatimukset näille samoille tietokantajärjestelmille.

Vaihe 15. Toiminnot SUM, AVG, MIN, MAX, COUNT…

Tämä vaihe näyttää, kuinka voit käyttää yksinkertaisia ​​​​funktioita SQL:ssä, kuten summa, minimi- ja maksimiarvot, keskiarvo jne. Aloitetaan heti esimerkillä kaikkien työntekijöiden keskimääräisen palvelusajan johtamisesta.

VALITSE AVG(D_STAFF.S_EXPERIENCE) [TYÖNTEKIJÖIDEN KESKIKOKOKEMUKSEKSI] D_HENKILÖSTÄ

SQL-funktio AVG.

Vastaavasti voit laskea minimi- ja maksimiarvot (MIN, MAX), kokonaissumman (SUM) jne. Suosittelen kokeilemaan tätä harjoitusohjelman avulla. On syytä yrittää määritellä lisäkriteerejä funktion lopullisen arvon määrittämiseen osallistuvien tietueiden valinnassa WHERE-lauseen avulla.

Yllä luetellut funktiot käyttävät koko kyselyn tulosta arvon määrittämiseen. Tällaisia ​​toimintoja kutsutaan aggregaatti . Lisäksi on useita toimintoja, joiden argumentit eivät ole kaikki pyynnössä määritellyn sarakkeen arvot, vaan kunkin tuloksen yksittäisen rivin jokainen yksittäinen arvo. Esimerkki tällaisesta funktiosta on SQL-funktio tekstikentän pituuden LEN laskemiseen:

VALITSE S_NAME, LENGTH (D_STAFF.S_NAME) AS [PITUUS] FROM D_STAFF


Voidaan käyttää SQL-funktioiden superpositio alla olevan kuvan mukaisesti ja laske S_NAME-kentän enimmäispituusarvo.

VALITSE MAX(LEN(D_STAFF.S_NAME)) AS [MAXIMUM LENGTH] FROM D_STAFF


SQL-funktio MAX.

Lopuksi, kaikki yhdessä.

SELECT SUM(D_STAFF.S_EXPERIENCE) AS [SUMMA], AVG(D_STAFF.S_EXPERIENCE) AS [KESKIMÄÄRÄ], MIN(D_STAFF.S_EXPERIENCE) AS [MINIMI], MAX(D_STAFF.S_KOKEMUS) AS [MAXIMUM], COUNT(*) AS [NUMEROJA], MAX(LEN(D_STAFF.S_NAME)) AS [MAXIMUM LENGTH] FROM D_STAFF


Esimerkki SQL-koostefunktioiden käytöstä.

Huomaa COUNT-funktion argumentti. Määritin (*) argumentiksi, koska haluan saada tietueiden kokonaismäärän. Jos määrität esimerkiksi COUNT(S_NAME), tuloksena on ei-tyhjien S_NAME-arvojen määrä (S_NAME EI OLE NULL). Olisi mahdollista kirjoittaa COUNT(DISTINCT S_NAME) ja saada yksilöllisten S_NAME-arvojen lukumäärä, mutta MS Access ei valitettavasti tue tätä vaihtoehtoa. Esimerkissämme COUNT(S_NAME) ja COUNT(*) antavat täsmälleen saman tuloksen.

Vaihe 16: Tekstin muuntaminen

Usein ohjelmiston käyttäjät täyttävät tekstiarvot eri tavalla: kuka kirjoittaa koko nimen. isolla kirjaimella, kuka ei ole; Jotkut kirjoittavat kaiken isoilla kirjaimilla. Monet raportointilomakkeet edellyttävät yhtenäistä lähestymistapaa, eivät vain raportointilomakkeita. Tämän ongelman ratkaisemiseksi SQL:llä on kaksi toimintoa UCASE ja LCASE. Alla on esimerkki pyynnöstä ja sen käsittelyn tuloksesta:

SELECT UCASE(D_STAFF.S_NAME) AS , LCASE(D_STAFF.S_NAME) AS FROM D_STAFF


SQL-funktiot UCASE ja LCASE.

Vaihe 17. SQL ja työskentely merkkijonojen kanssa

Siellä on myös upea MID-toiminto, joka auttaa sinua ratkaisemaan ongelman, joka liittyy merkkijonon osan erottamiseen tekstikentän koko arvosta. Tässäkin paras kommentti olisi esimerkki - esimerkki käyttäjäprofiilien nimien "kiusaamisesta".

SELECT UCASE(MID(P_NAME,3,5)) FROM D_PROFILE


SQL-funktioiden UCASE ja MID päällekkäisyys.

"Leikkasimme" profiilinimien arvoista kutakin 5 merkkiä, alkaen 3:sta, ja päädyimme joukkoon toistuvaa "roskaa". Jos haluat jättää vain yksilölliset arvot, käytämme DISTINCT-avainsanaa.

SELECT DISTINCT UCASE(MID(P_NAME,3,5)) D_PROFIILISTA


Yksilöllisten koontifunktioarvojen valitseminen.

Joskus sinun on käytettävä lausekkeita, joissa on LEN-funktio, argumentteina MID-funktiolle. Seuraavassa esimerkissä näytämme jo profiilinimien 5 viimeistä merkkiä.

VALITSE UCASE(KESKUS(P_NAME,PITO(P_NAME)-4,5)) D_PROFIILISTA


Käyttämällä SQL-funktiota LEN.

Vaihe 18. SQL-funktioiden käyttäminen tietueen valintakriteereissä. ON operaattori

Kun toiminnot on ymmärretty, herää melkein heti kysymys: miten niitä voidaan käyttää tietueiden valintakriteereissä? Jotkut toiminnot, nimittäin ne, jotka eivät ole koostefunktioita, ovat melko helppokäyttöisiä. Tässä on esimerkiksi luettelo työntekijöistä, joiden koko nimi. yli 25 merkkiä.

SELECT S_NAME FROM D_STAFF WHERE LEN(D_STAFF.S_NAME) > 25


Ei-aggregoivan LEN-funktion käyttäminen SQL-kyselyn ehdoissa.

No, jos sinun on esimerkiksi näytettävä kaikkien tehtävien tunnisteet, joissa yrityksessä on useampi kuin yksi työntekijä, tämä lähestymistapa ei toimi. Tarkoitan sitä, että seuraavassa kyselyssä ei ehkä ole järkeä, mutta se on virheellinen jäsennellyn kyselyn näkökulmasta. Tämä johtuu siitä tosiasiasta, että tällaisten SQL-kyselyiden käsittelemiseksi oikein koostefunktioiden avulla yksi lineaarinen läpikulku työntekijätietueiden läpi ei riitä.

SELECT S_POSITION FROM D_STAFF WHERE COUNT(S_POSITION)>1

Tällaisia ​​tapauksia varten SQL:ään otettiin HAVING-avainsana, joka auttaa meitä ratkaisemaan tehtävien ja työntekijöiden ongelman.

VALITSE S_POSITION D_STAFF-RYHMÄSTÄ S_POSITION MUKAAN, JOLLA COUNT(S_POSITION)>1


Aggregaattifunktioiden käyttäminen SQL-kyselyehdoissa.

Vaihe 19. Tietojen ryhmittely SQL-kyselyn tuloksissa käyttämällä GROUP BY -operaattoria

GROUP BY -operaattoria tarvitaan ryhmittelemään aggregaattifunktioiden arvot niihin liittyvien kenttien arvojen mukaan. Sitä tarvitaan, kun haluamme käyttää koontifunktion arvoa tietueen valintakriteereissä (edellinen vaihe). Sitä tarvitaan myös silloin, kun haluamme sisällyttää aggregaattifunktion arvon kyselyn tulokseen. Mutta yksinkertaisimmassa muodossaan ryhmittely vastaa sarakkeen ainutlaatuisten arvojen korostamista. Katsotaanpa esimerkkipyyntöä.

VALITSE S_POSITION D_HENKILÖSTÄ


Ja nämä ovat kaksi vaihtoehtoa, joiden avulla voit näyttää vain yksilölliset S_POSITION-arvot.

VALITSE S_POSITION D_STAFF-RYHMÄSTÄ S_POSITION MUKAAN

VALITSE ERILAINEN S_PAIKKA D_STAFFISTA


No, palataan nyt funktioarvojen ryhmittelyyn niihin liittyvien kenttien arvojen mukaan. Jokaisen käyttäjäprofiilin kohdalla näytämme siihen liittyvien tietueiden määrän D_STAFF_PROFILE-taulukossa.

VALITSE PROFILE_ID AS , COUNT(PROFILE_ID) KUIN [TIETUOTTEIDEN NUMERO] FROM D_STAFF_PROFILE GROUP BY PROFILE_ID


SQL-koontifunktion käyttö yhdessä ryhmittelyn kanssa.

GROUP BY -operaattorin avulla voit myös ryhmitellä kyselyn tulokset useamman kuin yhden kentän mukaan ja luetella ne pilkuilla eroteltuina. Toivon, että kaiken edellä mainitun jälkeen ei tarvita lisäkommentteja viimeisen kyselyn tulokseen.

VALITSE S.S_POSITION AS , S.S_NAME AS [TYÖNTEKIJÄNÄ], COUNT(SP.STAFF_ID) KUIN [TAULUKKOON D_STAFF_PROFILE TIETOJEN LUKU] FROM D_STAFF S, D_STAFF_PROFILE SP WHERE S.XD_IID=SP.STAFF_ID GROUP BYTION, S.S_POSITION. S_NAME


SQL-kyselyn tulosrivien ryhmittely useiden kenttien mukaan.

Kuinka saan selville tietyn toimittajan valmistamien PC-mallien lukumäärän? Kuinka määrittää tietokoneiden, joilla on samat tekniset ominaisuudet, keskihinta? Näihin ja moniin muihin joihinkin tilastotietoihin liittyviin kysymyksiin voidaan vastata käyttämällä lopulliset (aggregaatti) toiminnot. Standardi tarjoaa seuraavat aggregaattifunktiot:

Kaikki nämä funktiot palauttavat yhden arvon. Samalla toiminnot COUNT, MIN Ja MAX soveltuu mihin tahansa tietotyyppiin, kun taas SUMMA Ja AVG käytetään vain numeerisissa kentissä. Ero toiminnon välillä KREIVI(*) Ja KREIVI(<имя поля>) on, että toinen ei ota huomioon NULL-arvoja laskettaessa.

Esimerkki. Etsi henkilökohtaisten tietokoneiden vähimmäis- ja enimmäishinta:

Esimerkki. Etsi valmistajan A valmistamien tietokoneiden käytettävissä oleva määrä:

Esimerkki. Jos olemme kiinnostuneita valmistajan A valmistamien eri mallien määrästä, kysely voidaan muotoilla seuraavasti (käyttämällä sitä tosiasiaa, että tuotetaulukkoon jokainen malli kirjataan kerran):

Esimerkki. Selvitä valmistajan A valmistamien eri mallien lukumäärä. Kysely on samanlainen kuin edellinen, jossa piti määrittää valmistajan A valmistamien mallien kokonaismäärä. Täältä tulee myös etsiä eri mallien lukumäärä PC-pöytä (eli ne, jotka ovat myynnissä).

Sen varmistamiseksi, että tilastollisia indikaattoreita hankittaessa käytetään vain yksilöllisiä arvoja, milloin aggregaattifunktioiden argumentti voidaan käyttää DISTINCT-parametri. Toinen parametri ALL on oletusarvo ja olettaa, että kaikki sarakkeen palautetut arvot lasketaan. Operaattori,

Jos meidän on saatava tuotettujen PC-mallien lukumäärä kaikille valmistajalta, sinun on käytettävä GROUP BY lauseke, seuraavat syntaktisesti WHERE-lausekkeet.

GROUP BY lauseke

GROUP BY lauseke käytetään määrittämään tuloslinjojen ryhmiä, joihin voidaan soveltaa koontifunktiot (COUNT, MIN, MAX, AVG ja SUM). Jos tämä lauseke puuttuu ja käytetään koostefunktioita, kaikki sarakkeet, joiden nimet on mainittu VALITSE, on sisällytettävä aggregaattifunktiot, ja näitä toimintoja käytetään koko rivijoukolle, joka täyttää kyselypredikaatin. Muussa tapauksessa kaikki SELECT-luettelon sarakkeet ei sisälly aggregaattifunktioissa on määritettävä GROUP BY -lauseessa. Tämän seurauksena kaikki tuloskyselyrivit on jaettu ryhmiin, joille on ominaista samat arvoyhdistelmät näissä sarakkeissa. Tämän jälkeen kuhunkin ryhmään sovelletaan koostefunktioita. Huomaa, että GROUP BY:n kaikkia NULL-arvoja käsitellään samanarvoisina, ts. kun ryhmitellään kentällä, joka sisältää NULL-arvoja, kaikki tällaiset rivit kuuluvat yhteen ryhmään.
Jos jos on GROUP BY -lauseke, SELECT-lauseessa ei aggregaattitoimintoja, kysely palauttaa vain yhden rivin kustakin ryhmästä. Tätä ominaisuutta yhdessä DISTINCT-avainsanan kanssa voidaan käyttää poistamaan päällekkäiset rivit tulosjoukosta.
Katsotaanpa yksinkertaista esimerkkiä:
VALITSE malli, COUNT(malli) AS määrä_malli, AVG(hinta) AS keskihinta
PC:ltä
GROUP BY mallin mukaan;

Tässä pyynnössä jokaiselle PC-mallille määritetään niiden lukumäärä ja keskimääräinen hinta. Kaikki rivit, joilla on sama malliarvo, muodostavat ryhmän, ja SELECT-tulostus laskee kunkin ryhmän arvojen lukumäärän ja keskihinta-arvot. Kyselyn tulos on seuraava taulukko:
malli Määrä_malli Avg_price
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Jos SELECT:ssä olisi päivämääräsarake, nämä indikaattorit olisi mahdollista laskea kullekin tietylle päivämäärälle. Tätä varten sinun on lisättävä päivämäärä ryhmittelysarakkeeksi, jonka jälkeen koontifunktiot lasketaan kullekin arvoyhdistelmälle (malli-päivämäärä).

On olemassa useita erityisiä aggregaattitoimintojen suorittamista koskevat säännöt:

  • Jos pyynnön seurauksena rivejä ei vastaanotettu(tai useamman kuin yhden rivin tietylle ryhmälle), silloin ei ole lähdetietoja minkään aggregaattifunktion laskemiseen. Tässä tapauksessa COUNT-funktioiden tulos on nolla ja kaikkien muiden funktioiden tulos on NULL.
  • Perustelu aggregaattitoiminto itse ei voi sisältää aggregoituja toimintoja(funktio funktiosta). Nuo. yhdellä kyselyllä on mahdotonta saada esimerkiksi keskiarvojen maksimi.
  • COUNT-funktion suorittamisen tulos on kokonaisluku(KOKONAISLUKU). Muut koontifunktiot perivät käsittelemiensä arvojen tietotyypit.
  • Jos SUM-funktio tuottaa tuloksen, joka on suurempi kuin käytetyn tietotyypin maksimiarvo, virhe.

Joten jos pyyntö ei sisällä GROUP BY -lausekkeet, Tuo aggregaattifunktiot mukana SELECT-lauseke, suoritetaan kaikilla tuloksena olevilla kyselyriveillä. Jos pyyntö sisältää GROUP BY lauseke, jokainen rivijoukko, jolla on samat arvot sarakkeessa tai sarakeryhmässä määritellyllä sarakkeella GROUP BY lauseke, muodostaa ryhmän ja aggregaattifunktiot suoritetaan jokaiselle ryhmälle erikseen.

ON TARJOUS

Jos WHERE-lauseke määrittää sitten predikaatin rivien suodattamiseen ON TARJOUS pätee ryhmittelyn jälkeen määrittääksesi samanlaisen predikaatin, joka suodattaa ryhmät arvojen mukaan aggregaattifunktiot. Tätä lauseketta tarvitaan käyttämällä saatujen arvojen validointiin aggregaattitoiminto ei määritetyn tietuelähteen yksittäisiltä riveiltä FROM lausekkeesta, ja alkaen tällaisten linjojen ryhmiä. Siksi tällaista tarkistusta ei voida sisällyttää WHERE-lauseke.