SQL Server GROUPING SETS
Rezumat: în acest tutorial, veți învăța cum să utilizați SQL Server GROUPING SETS
pentru a genera mai multe seturi de grupare.
Configurați un tabel de sinteză a vânzărilor
Să creăm un tabel nou numit sales.sales_summary
pentru demonstrație.
Code language: SQL (Structured Query Language) (sql)
În această interogare, recuperăm datele privind valoarea vânzărilor în funcție de marcă și categorie și le completăm în tabelul sales.sales_summary
.
Următoarea interogare returnează date din tabelul sales.sales_summary
:
Code language: SQL (Structured Query Language) (sql)
Începem cu SQL Server GROUPING SETS
Prin definiție, un set de grupare este un grup de coloane prin care se grupează. De obicei, o singură interogare cu un agregat definește un singur set de grupare.
De exemplu, următoarea interogare definește un set de grupare care include marca și categoria care este notată ca (brand, category)
. Interogarea returnează valoarea vânzărilor grupate în funcție de marcă și categorie:
Code language: SQL (Structured Query Language) (sql)
Interogarea următoare returnează valoarea vânzărilor în funcție de marcă. Aceasta definește un set de grupare (brand)
:
Code language: SQL (Structured Query Language) (sql)
Următoarea interogare returnează valoarea vânzărilor în funcție de categorie. Aceasta definește un set de grupare (category)
:
Code language: SQL (Structured Query Language) (sql)
Următoarea interogare definește un set de grupare gol ()
. Aceasta returnează valoarea vânzărilor pentru toate mărcile și categoriile.
Code language: SQL (Structured Query Language) (sql)
Cele patru interogări de mai sus returnează patru seturi de rezultate cu patru seturi de grupare:
Code language: SQL (Structured Query Language) (sql)
Pentru a obține un set de rezultate unificat cu date agregate pentru toate seturile de grupare, puteți utiliza operatorul UNION ALL
.
Pentru că operatorul UNION ALL
necesită ca toate seturile de rezultate să aibă același număr de coloane, trebuie să adăugați NULL
la lista de selectare a interogărilor astfel:
Code language: SQL (Structured Query Language) (sql)
Interogarea a generat un singur rezultat cu agregatele pentru toate seturile de grupare, așa cum ne așteptam.
Cu toate acestea, are două probleme majore:
- Interogarea este destul de lungă.
- Interogarea este lentă deoarece SQL Server trebuie să execute patru subinterogări și combină seturile de rezultate într-unul singur.
Pentru a rezolva aceste probleme, SQL Server oferă o subclauză a clauzei GROUP BY
numită GROUPING SETS
.
Clujba GROUPING SETS
definește mai multe seturi de grupare în aceeași interogare. În cele ce urmează este prezentată sintaxa generală a GROUPING SETS
:
Code language: SQL (Structured Query Language) (sql)
Această interogare creează patru seturi de grupare:
Code language: SQL (Structured Query Language) (sql)
Puteți utiliza această GROUPING SETS
pentru a rescrie interogarea care obține datele de vânzări după cum urmează:
Code language: SQL (Structured Query Language) (sql)
După cum puteți vedea, interogarea produce același rezultat ca și cea care utilizează operatorul UNION ALL
. Cu toate acestea, această interogare este mult mai ușor de citit și, bineînțeles, mai eficientă.
Funcția GROUPING
Funcția GROUPING
indică dacă o coloană specificată într-o clauză GROUP BY
este agregată sau nu. Ea returnează 1 pentru agregat sau 0 pentru neagregat în setul de rezultate.
Vezi următorul exemplu de interogare:
Code language: SQL (Structured Query Language) (sql)
Valoarea din coloana grouping_brand
indică faptul că rândul este agregat sau nu, 1 înseamnă că valoarea vânzărilor este agregată în funcție de marcă, 0 înseamnă că valoarea vânzărilor nu este agregată în funcție de marcă. Același concept se aplică și în cazul coloanei grouping_category
.
În acest tutorial, ați învățat cum să generați mai multe seturi de grupare într-o interogare utilizând SQL Server GROUPING SETS
.
.