Összefoglaló: Ebben a bemutatóban megismerkedhet a csoportosító halmazok fogalmával és azzal, hogyan használhatja a PostgreSQL GROUPING SETS záradékát több csoportosító halmaz létrehozására egy lekérdezésben.
Mintatábla beállítása
Kezdjük el egy új,sales nevű tábla létrehozásával a bemutatóhoz.
Code language: SQL (Structured Query Language) (sql)

A sales tábla az eladott termékek számát tárolja márka és szegmens szerint.
Bevezetés a PostgreSQL-hez CSOPORTKÉSZLETEK
A csoportosító készlet olyan oszlopok halmaza, amelyek alapján a GROUP BY záradék használatával csoportosíthat.
A csoportosító készletet az oszlopok zárójelek közé tett, vesszővel elválasztott listája jelöli:
A következő lekérdezés például a GROUP BY záradékot használja az eladott termékek számának márka és szegmens szerinti megadására. Más szóval, meghatározza a márka és a szegmens csoportosító halmazát, amelyet a (brand, segement)
Code language: SQL (Structured Query Language) (sql)

A következő lekérdezés egy márka által eladott termékek számát találja meg. Meghatározza a (brand):
Code language: SQL (Structured Query Language) (sql)

A következő lekérdezés a szegmensenként értékesített termékek számát találja meg. Meghatározza a (segment):
Code language: SQL (Structured Query Language) (sql)

A következő lekérdezés az összes márka és szegmens esetében megtalálja az eladott termékek számát. Egy üres csoportosítási halmazt definiál, amelyet a következővel jelöl: ().
Code language: SQL (Structured Query Language) (sql)

Tegyük fel, hogy egyetlen lekérdezéssel az összes csoportosítási halmazt meg akarja keresni. Ennek eléréséhez a UNION ALL segítségével kombinálhatja a fenti lekérdezéseket.
Mert mivel a UNION ALL megköveteli, hogy minden eredményhalmaznak ugyanannyi kompatibilis adattípusú oszloppal kell rendelkeznie, a lekérdezéseket úgy kell beállítania, hogy mindegyik kiválasztási listájához hozzáadja a NULL-t az alábbiak szerint:
Code language: SQL (Structured Query Language) (sql)

Ez a lekérdezés egyetlen eredményhalmazt generál az összes csoportosítási halmaz aggregátumával.
Noha a fenti lekérdezés az elvárásoknak megfelelően működik, két fő problémája van:
- Először is, meglehetősen hosszadalmas.
- Másodszor, teljesítményproblémát okoz, mivel a PostgreSQL-nek minden egyes lekérdezésnél külön kell átvizsgálnia a
salestáblát.
A hatékonyság növelése érdekében a PostgreSQL biztosítja a GROUPING SETS klauzulát, amely a GROUP BY klauzula alkluzulája.
A GROUPING SETS lehetővé teszi több csoportosítási halmaz definiálását ugyanabban a lekérdezésben.
A GROUPING SETS általános szintaxisa a következő:
Code language: SQL (Structured Query Language) (sql)
Ebben a szintaxisban négy csoportosítási halmazunk van: (c1,c2), (c1), (c2) és ().
Ezt a szintaxist a fenti példára alkalmazva a UNION ALL záradék helyett a GROUPING SETS záradékot használhatjuk a következőképpen:
Code language: SQL (Structured Query Language) (sql)

Ez a lekérdezés sokkal rövidebb és olvashatóbb. Ezenkívül a PostgreSQL optimalizálja a sales tábla átvizsgálásának számát, és nem vizsgálja át többször.
Grouping function
A GROUPING() függvény egy argumentumot fogad el, amely lehet egy oszlopnév vagy egy kifejezés:
A column_name vagy expression kifejezésnek meg kell egyeznie a GROUP BY záradékban megadottal.
A GROUPING() függvény 0 bitet ad vissza, ha az argumentum az aktuális csoportosítási halmaz tagja, ellenkező esetben 1-et.
Lássuk a következő példát:
Code language: SQL (Structured Query Language) (sql)

A képernyőképen látható, hogy ha a grouping_brand-ben lévő érték 0, a sum oszlop a brand részösszegét mutatja.
Ha a grouping_segment-ban lévő érték nulla, az összeg oszlop a segment részösszegét mutatja.
A HAVING záradékban lévő GROUPING() függvénnyel így találhatja meg az egyes márkák részösszegét:

Ezzel a bemutatóval megtanulta, hogyan használhatja a PostgreSQL GROUPING SETS-t több csoportosítási halmaz létrehozására.
- Az oktatóanyag hasznos volt?
- IgenNem