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:

  1. A lekérdezés meglehetősen hosszadalmas.
  2. 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.

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.