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.
.