SQL Server RYHMITTELYASETELMAT

Yhteenveto: Tässä opetusohjelmassa opit, miten SQL Serverin GROUPING SETS avulla luodaan useita ryhmittelyjoukkoja.

Myynnin yhteenvetotaulukon määrittäminen

Luotaan uusi taulukko nimeltä sales.sales_summary esittelyä varten.

Code language: SQL (Structured Query Language) (sql)

Tässä kyselyssä haetaan myynnin summatiedot tuotemerkeittäin ja luokittain ja täytetään ne sales.sales_summary-taulukkoon.

Seuraava kysely palauttaa tiedot sales.sales_summary-taulukosta:

Code language: SQL (Structured Query Language) (sql)

Aloitetaan SQL Serverin RYHMITTELYASETELMAT

Määritelmällisesti ryhmittelyjoukko (grouping set, grouping set, Grouping set,) on sarakkeista koostuva ryhmä sarakkeista, joilla ryhmitellään. Tyypillisesti yksi kysely, jossa on aggregaatti, määrittelee yhden ryhmittelyjoukon.

Esimerkiksi seuraava kysely määrittelee ryhmittelyjoukon, joka sisältää tuotemerkin ja luokan, jota merkitään (brand, category). Kysely palauttaa myyntimäärän ryhmiteltynä tuotemerkin ja luokan mukaan:

Code language: SQL (Structured Query Language) (sql)

Seuraava kysely palauttaa myyntimäärän tuotemerkin mukaan. Se määrittelee ryhmittelyjoukon (brand):

Code language: SQL (Structured Query Language) (sql)

Seuraava kysely palauttaa myyntimäärän luokan mukaan. Se määrittelee ryhmittelyjoukon (category):

Code language: SQL (Structured Query Language) (sql)

Se määrittelee tyhjän ryhmittelyjoukon (). Se palauttaa kaikkien tuotemerkkien ja luokkien myyntimäärän.

Code language: SQL (Structured Query Language) (sql)

Yllä olevat neljä kyselyä palauttavat neljä tulosjoukkoa, joissa on neljä ryhmittelyjoukkoa:

Code language: SQL (Structured Query Language) (sql)

Voidaksesi saada yhtenäisen tulosjoukon, joka sisältää kaikkien ryhmittelyjoukkojen aggregoidut tiedot, voit käyttää UNION ALL-operaattoria.

Koska UNION ALL-operaattori edellyttää, että kaikilla tulosjoukoilla on sama määrä sarakkeita, sinun on lisättävä kyselyjen valintaluetteloon NULL seuraavasti:

Code language: SQL (Structured Query Language) (sql)

Kysely tuotti odotetusti yhden ainoan tuloksen, jossa on kaikkien ryhmittelyjoukkojen aggregoidut tiedot.

Tässä on kuitenkin kaksi suurta ongelmaa:

  1. Kysely on melko pitkä.
  2. Kysely on hidas, koska SQL Serverin on suoritettava neljä alakyselyä ja yhdistettävä tulosjoukot yhdeksi.

Tämän ongelman korjaamiseksi SQL Server tarjoaa GROUP BY-lausekkeen alilausekkeen nimeltä GROUPING SETS.

Lausekkeessa GROUPING SETS määritellään useita ryhmittelyjoukkoja samaan kyselyyn. Seuraavassa on esitetty GROUPING SETS:n yleinen syntaksi:

Code language: SQL (Structured Query Language) (sql)

Tämä kysely luo neljä ryhmittelyjoukkoa:

Code language: SQL (Structured Query Language) (sql)

Voit käyttää tätä GROUPING SETS:tä kirjoittaaksesi myynnin tiedot hankkivan kyselyn uudelleen seuraavasti:

Code language: SQL (Structured Query Language) (sql)

Kuten huomaat, kysely tuottaa saman tuloksen kuin UNION ALL-operaattoria käyttävä kysely. Tämä kysely on kuitenkin paljon luettavampi ja tietenkin tehokkaampi.

GROUPING-funktio

Funktio GROUPING ilmoittaa, aggregoidaanko GROUP BY-lausekkeessa määritetty sarake vai ei. Se palauttaa tulosjoukkoon 1, jos se on aggregoitu, tai 0, jos se ei ole aggregoitu.

Katso seuraava kyselyesimerkki:

Code language: SQL (Structured Query Language) (sql)

Sarakkeen grouping_brand arvo ilmaisee, onko rivi aggregoitu vai ei, 1 tarkoittaa, että myyntisumma on aggregoitu tuotemerkeittäin, 0 tarkoittaa, että myyntisumma ei ole aggregoitu tuotemerkeittäin. Samaa käsitettä sovelletaan grouping_category-sarakkeeseen.

Tässä opetusohjelmassa olet oppinut, miten kyselyssä luodaan useita ryhmittelyjoukkoja käyttämällä SQL Serverin GROUPING SETS.

Vastaa

Sähköpostiosoitettasi ei julkaista.