SQL Server GROUPING SETS
Podsumowanie: w tym samouczku dowiesz się, jak używać SQL Server GROUPING SETS
do generowania wielu zestawów grupujących.
Ustawianie tabeli podsumowującej sprzedaż
Utwórzmy nową tabelę o nazwie sales.sales_summary
dla celów demonstracyjnych.
Code language: SQL (Structured Query Language) (sql)
W tym zapytaniu pobieramy dane dotyczące kwoty sprzedaży według marki i kategorii i umieszczamy je w tabeli sales.sales_summary
.
Następujące zapytanie zwraca dane z tabeli sales.sales_summary
:
Code language: SQL (Structured Query Language) (sql)
Początkowanie pracy z SQL Server ZESTAWY GRUPUJĄCE
Z definicji zestaw grupujący to grupa kolumn, według których grupujesz. Zazwyczaj pojedyncze zapytanie z agregatem definiuje pojedynczy zestaw grupujący.
Na przykład, poniższe zapytanie definiuje zestaw grupujący zawierający markę i kategorię, który jest oznaczony jako (brand, category)
. Zapytanie zwraca kwotę sprzedaży pogrupowaną według marki i kategorii:
Code language: SQL (Structured Query Language) (sql)
Następujące zapytanie zwraca kwotę sprzedaży według marki. Definiuje ono zbiór grupujący (brand)
:
Code language: SQL (Structured Query Language) (sql)
Następujące zapytanie zwraca kwotę sprzedaży według kategorii. Definiuje ono zbiór grupujący (category)
:
Code language: SQL (Structured Query Language) (sql)
Następujące zapytanie definiuje pusty zbiór grupujący ()
. Zwraca ono kwotę sprzedaży dla wszystkich marek i kategorii.
Code language: SQL (Structured Query Language) (sql)
Cztery powyższe zapytania zwracają cztery zestawy wyników z czterema zestawami grupującymi:
Code language: SQL (Structured Query Language) (sql)
Aby uzyskać ujednolicony zestaw wyników z zagregowanymi danymi dla wszystkich zestawów grupujących, można użyć operatora UNION ALL
.
Ponieważ operator UNION ALL
wymaga, aby wszystkie zestawy wyników miały taką samą liczbę kolumn, należy dodać NULL
do listy wyboru do zapytań w następujący sposób:
Code language: SQL (Structured Query Language) (sql)
Zapytanie wygenerowało pojedynczy wynik z agregatami dla wszystkich zestawów grupujących, tak jak się spodziewaliśmy.
Ma ono jednak dwa poważne problemy:
- Kwerenda jest dość długa.
- Kwerenda jest powolna, ponieważ SQL Server musi wykonać cztery podzapytania i łączy zestawy wyników w jeden.
Aby rozwiązać te problemy, SQL Server udostępnia podklauzulę klauzuli GROUP BY
o nazwie GROUPING SETS
.
Klauzula GROUPING SETS
definiuje wiele zestawów grupujących w tym samym zapytaniu. Poniżej przedstawiono ogólną składnię GROUPING SETS
:
Code language: SQL (Structured Query Language) (sql)
To zapytanie tworzy cztery zestawy grupujące:
Code language: SQL (Structured Query Language) (sql)
Możesz użyć tego GROUPING SETS
do przepisania zapytania, które pobiera dane o sprzedaży, w następujący sposób:
Code language: SQL (Structured Query Language) (sql)
Jak widać, zapytanie daje taki sam wynik jak zapytanie wykorzystujące operator UNION ALL
. Jednak to zapytanie jest znacznie bardziej czytelne i oczywiście bardziej wydajne.
Funkcja GROUPING
Funkcja GROUPING
wskazuje, czy określona kolumna w klauzuli GROUP BY
jest zagregowana, czy nie. Zwraca 1 dla zagregowanych lub 0 dla niezagregowanych w zbiorze wyników.
Zobacz następujący przykład zapytania:
Code language: SQL (Structured Query Language) (sql)
Wartość w kolumnie grouping_brand
wskazuje, czy wiersz jest zagregowany czy nie, 1 oznacza, że kwota sprzedaży jest zagregowana według marki, 0 oznacza, że kwota sprzedaży nie jest zagregowana według marki. Ta sama koncepcja jest stosowana do kolumny grouping_category
.
W tym samouczku dowiedziałeś się, jak wygenerować wiele zestawów grupujących w zapytaniu za pomocą SQL Server GROUPING SETS
.
.