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:

  1. Kwerenda jest dość długa.
  2. 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.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.