SQL Server CSOPORTOZÁSI KÉSZLETEK
Összefoglaló: ebben a bemutatóban megtanuljuk, hogyan használjuk az SQL Server GROUPING SETS-t több csoportosítási készlet létrehozására.
Eladási összesítő tábla létrehozása
A bemutatóhoz hozzunk létre egy új, sales.sales_summary nevű táblát.
Code language: SQL (Structured Query Language) (sql)
Ezzel a lekérdezéssel lekérdezzük az értékesítési összegadatokat márka és kategória szerint, és feltöltjük a sales.sales_summary táblába.
A következő lekérdezés a sales.sales_summary táblából adja vissza az adatokat:
Code language: SQL (Structured Query Language) (sql)

Elkezdés az SQL Server CSOPORTOZÁSI KÉSZLETEK
A definíció szerint a csoportosítási készlet olyan oszlopok csoportja, amelyek alapján csoportosíthatunk. Általában egyetlen aggregátummal ellátott lekérdezés egyetlen csoportosítási halmazt határoz meg.
A következő lekérdezés például egy olyan csoportosítási halmazt határoz meg, amely tartalmazza a márkát és a kategóriát, amelyet (brand, category)-ként jelölünk. A lekérdezés visszaadja a márka és kategória szerint csoportosított értékesítési összeget:
Code language: SQL (Structured Query Language) (sql)

A következő lekérdezés visszaadja az értékesítési összeget márka szerint. Meghatározza a (brand) csoportosítási halmazt:
Code language: SQL (Structured Query Language) (sql)

A következő lekérdezés az értékesítés összegét kategória szerint adja vissza. Egy (category):
Code language: SQL (Structured Query Language) (sql)

csoportosítási halmazt definiál A következő lekérdezés egy üres () csoportosítási halmazt definiál. Az összes márka és kategória értékesítési összegét adja vissza.
Code language: SQL (Structured Query Language) (sql)

A fenti négy lekérdezés négy eredményhalmazt ad vissza négy csoportosítási halmazzal:
Code language: SQL (Structured Query Language) (sql)
Az összes csoportosítási halmaz összesített adatait tartalmazó egységes eredményhalmazhoz a UNION ALL operátorral juthat.
Mivel a UNION ALL operátor megköveteli, hogy minden eredményhalmaznak azonos számú oszloppal rendelkezzen, a lekérdezésekhez a következőképpen kell hozzáadni a NULL-t a kiválasztási listához:
Code language: SQL (Structured Query Language) (sql)

A lekérdezés az összes csoportosítási halmaz összesített adatait tartalmazó egységes eredményt generált, ahogy vártuk.
Viszont két fő problémája van:
- A lekérdezés meglehetősen hosszadalmas.
- A lekérdezés lassú, mert az SQL Server-nek négy alkérdést kell végrehajtania, és az eredményhalmazokat egyetlenegyben egyesíti.
Ezek a problémák megoldására az SQL Server a GROUP BY záradéknak egy GROUPING SETS nevű alpontját biztosítja.
A GROUPING SETS több csoportosítási halmazt definiál ugyanabban a lekérdezésben. Az alábbiakban a GROUPING SETS általános szintaxisát mutatjuk be:
Code language: SQL (Structured Query Language) (sql)
Ez a lekérdezés négy csoportosítási halmazt hoz létre:
Code language: SQL (Structured Query Language) (sql)
Ezzel a GROUPING SETS-vel átírhatja az értékesítési adatokat megszerző lekérdezést a következőképpen:
Code language: SQL (Structured Query Language) (sql)
Amint látható, a lekérdezés ugyanazt az eredményt adja, mint a UNION ALL operátort használó. Ez a lekérdezés azonban sokkal olvashatóbb és természetesen hatékonyabb is.
GROUPING függvény
A GROUPING függvény azt jelzi, hogy egy GROUP BY záradékban megadott oszlopot összesíteni kell-e vagy sem. Az eredményhalmazban 1-et ad vissza, ha összevont, vagy 0-t, ha nem összevont.
Lássuk a következő lekérdezési példát:
Code language: SQL (Structured Query Language) (sql)

A grouping_brand oszlopban lévő érték jelzi, hogy a sor összevont vagy nem, 1 azt jelenti, hogy az értékesítési összeg márka szerint összevont, 0 azt, hogy az értékesítési összeg márka szerint nem összevont. Ugyanezt a koncepciót alkalmazzuk a grouping_category oszlopra is.
Ezzel a bemutatóval megtanulta, hogyan hozhat létre több csoportosítási halmazt egy lekérdezésben az SQL Server GROUPING SETS használatával.
.




