Yhteenveto: Tässä opetusohjelmassa tutustutaan ryhmittelyjoukon käsitteeseen ja siihen, miten PostgreSQL:n GROUPING SETS
-lauseketta käytetään useiden ryhmittelyjoukkojen luomiseen kyselyssä.
Esimerkkitaulukon perustaminen
Aloitetaan luomalla esittelyä varten uusi taulukko nimeltäsales
.
Code language: SQL (Structured Query Language) (sql)
Taulukkoon sales
tallennetaan myytyjen tuotteiden määrä tuotemerkin ja segmentin mukaan.
Introduction to PostgreSQL GROUPING SETS
Ryhmittelyjoukko on joukko sarakkeita, joiden mukaan ryhmitellään GROUP BY
-lausekkeen avulla.
Ryhmittelyjoukko merkitään pilkulla erotetulla sarakeluettelolla, joka on sijoitettu sulkujen sisälle:
Esimerkiksi seuraavassa kyselyssä käytetään GROUP BY
-lauseketta, kun halutaan palauttaa myytyjen tuotteiden määrä tuotemerkin ja -segmentin mukaan. Toisin sanoen siinä määritellään tuotemerkin ja segmentin ryhmittelyjoukko, jota merkitään (brand, segement)
Code language: SQL (Structured Query Language) (sql)
Seuraavalla kyselyllä etsitään tuotemerkin myymien tuotteiden lukumäärä. Se määrittelee ryhmittelyjoukon (brand)
:
Code language: SQL (Structured Query Language) (sql)
Seuraavalla kyselyllä löydetään segmenteittäin myytyjen tuotteiden lukumäärä. Se määrittelee ryhmittelyjoukon (segment)
:
Code language: SQL (Structured Query Language) (sql)
Seuraavalla kyselyllä etsitään myytyjen tuotteiden lukumäärä kaikkien tuotemerkkien ja segmenttien osalta. Se määrittelee tyhjän ryhmittelyjoukon, jota merkitään ()
.
Code language: SQL (Structured Query Language) (sql)
Esitellään, että halutaan kaikki ryhmittelyjoukot yhdellä kyselyllä. Voit saavuttaa tämän käyttämällä UNION ALL
yhdistämällä kaikki edellä mainitut kyselyt.
Koska UNION ALL
edellyttää, että kaikissa tulosjoukoissa on sama määrä sarakkeita, joiden tietotyypit ovat yhteensopivia, kyselyjä on mukautettava lisäämällä NULL
kunkin valintaluetteloon alla esitetyllä tavalla:
Code language: SQL (Structured Query Language) (sql)
Tämä kysely tuotti yhden tulosjoukon, joka sisälsi kaikkien ryhmittelyjoukkojen aggregaatit.
Vaikka yllä oleva kysely toimii odotetusti, siinä on kaksi pääongelmaa.
- Ensiksi se on melko pitkä.
- Toiseksi siinä on suorituskykyongelmia, koska PostgreSQL joutuu skannaamaan
sales
-taulukon erikseen jokaista kyselyä varten.
Tehokkaammaksi PostgreSQL tarjoaa GROUPING SETS
-lausekkeen, joka on GROUP BY
-lausekkeen alalauseke.
GROUPING SETS
Lausekkeen GROUPING SETS
avulla voit määritellä useita ryhmittelyjoukkoja samaan kyselyyn.
GROUPING SETS
:n yleinen syntaksi on seuraava:
Code language: SQL (Structured Query Language) (sql)
Tässä syntaksissa meillä on neljä ryhmittelyjoukkoa (c1,c2)
, (c1)
, (c2)
ja ()
.
Tämän syntaksin soveltamiseksi yllä olevaan esimerkkiin voit käyttää GROUPING SETS
-lauseketta UNION ALL
-lausekkeen sijasta seuraavasti:
Code language: SQL (Structured Query Language) (sql)
Tämä kysely on paljon lyhyempi ja luettavampi. Lisäksi PostgreSQL optimoi sales
-taulukon skannauskerrat eikä skannaa taulukkoa useaan kertaan.
Ryhmittelyfunktio
Funktio GROUPING()
hyväksyy argumentin, joka voi olla sarakkeen nimi tai lauseke:
column_name
tai expression
:n on täsmättävä lausekkeessa GROUP BY
määritellyn kanssa.
Funktio GROUPING()
palauttaa bitin 0, jos argumentti kuuluu nykyiseen ryhmittelyjoukkoon, ja muuten 1.
Katso seuraava esimerkki:
Code language: SQL (Structured Query Language) (sql)
Kuvakaappauksen mukaan, kun grouping_brand
:ssä oleva arvo on 0, sarakkeessa sum
näkyy brand
:n välisumma.
Kun grouping_segment
:ssä oleva arvo on nolla, sarakkeessa summa näkyy segment
:n välisumma.
Voit käyttää GROUPING()
-funktiota HAVING
-lausekkeessa löytääksesi kunkin tuotemerkin välisumman näin:
Tässä opetusohjelmassa olet oppinut käyttämään PostgreSQL:n GROUPING SETS
-toimintoa useiden ryhmittelyjoukkojen luomiseen.
- Oliko tästä opetusohjelmasta apua?
- KylläEi