Tabele przestawne to jedno z ulubionych narzędzi analityków korzystających z Excela. Ale co zrobić, gdy dane znajdują się w bazie SQL? Czy da się stworzyć coś podobnego w SQL, aby analizować dane w układzie krzyżowym? Odpowiedź brzmi: tak! W tym artykule pokażę, jak przy pomocy GROUP BY oraz CASE WHEN zbudować prostą tabelę przestawną w SQL.
1. Wstęp – o co chodzi z tabelą przestawną w SQL?
Tabele przestawne umożliwiają analizę danych w układzie, gdzie jedna oś przedstawia kategorie, a druga np. lata lub inne wymiary. W naszym przypadku chcemy policzyć liczbę zamówień dla różnych metod dostawy (Shipping Mode) w poszczególnych latach (Order Year).
2. Wyodrębnianie kategorii – unikalne wartości Shipping Mode
Pierwszym krokiem jest sprawdzenie, jakie mamy dostępne kategorie w kolumnie Shipping Mode. Wykorzystujemy do tego prostą komendę:
SELECT DISTINCT shipping_mode FROM orders;Wynik to lista metod dostawy, takich jak:
- Second Class
- Standard Class
- First Class
- Same Day
3. Tworzenie tabeli przestawnej – zastosowanie CASE WHEN
Kolejnym krokiem jest policzenie liczby zamówień dla każdej kategorii dostawy w podziale na lata. Używamy GROUP BY oraz konstrukcji CASE WHEN, aby każda metoda dostawy była osobną kolumną:
SELECT YEAR(order_date) AS order_year, COUNT(CASE WHEN shipping_mode = 'Second Class' THEN order_id END) AS second_class, COUNT(CASE WHEN shipping_mode = 'Standard Class' THEN order_id END) AS standard_class, COUNT(CASE WHEN shipping_mode = 'First Class' THEN order_id END) AS first_class, COUNT(CASE WHEN shipping_mode = 'Same Day' THEN order_id END) AS same_day FROM orders GROUP BY order_year ORDER BY order_year;4. Wynik – analiza zamówień według lat i metod dostawy
Po wykonaniu zapytania otrzymujemy tabelę, która wygląda jak klasyczna tabela przestawna. Przykładowe dane mogą wyglądać następująco:
2018 | 166 | 518 | 126 | 45 |
2019 | 206 | 633 | 143 | 50 |
2020 | 243 | 774 | 211 | 74 |
2021 | 319 | 965 | 283 | 86 |
2022 | 30 | 104 | 24 | 9 |
Każda kolumna odpowiada liczbie zamówień złożonych w danym roku dla wybranej metody dostawy. Możemy w prosty sposób przeanalizować trendy w zamówieniach.
5. Obsługa NULL w CASE WHEN
Warto wspomnieć, iż w SQL wartość NULL nie jest liczona w funkcji COUNT. Dlatego nie musimy definiować ELSE NULL w CASE WHEN. Dzięki temu liczymy tylko zamówienia, które spełniają warunek, np. shipping_mode = 'Second Class'.
6. Podsumowanie
Tabele przestawne w SQL nie są tak trudne, jak się wydaje. Dzięki GROUP BY i CASE WHEN możemy łatwo analizować dane w układzie krzyżowym. Ten prosty przykład pokazuje, jak w kilku krokach stworzyć dynamiczną analizę, która dostarcza cennych informacji.
Jeśli ten przykład Ci się spodobał, koniecznie sprawdź moje inne materiały, gdzie omawiam bardziej zaawansowane funkcje SQL, a także pokazuję, jak efektywnie analizować dane w Excelu, Pythonie czy Tableau!
Najlepsze kursy z analizy danych – Excel, SQL, Python i więcej – znajdziesz u mnie na:
kajodata.com/kursy
Wolisz czytać po angielsku? No problem!
Inne interesujące artykuły:
- Tworzenie histogramu w SQL – praktyczne podejście z subquery, CTE i CASE WHEN
- Czyszczenie danych (Data Cleaning) – 5 kroków do czystych danych
- Błędy w CV – jak pisać CV, by zdobyć wymarzoną pracę
- Brak pracy dla juniorów – jak zostać analitykiem danych?
- 9 błędów na LinkedIn, które niszczą Twoje szanse na znalezienie pracy
To tyle w tym temacie. Analizujcie w pokoju!
Podobał Ci się ten artykuł 🙂?
Podziel się nim w Social Mediach 📱
>>> udostępnij go na LinkedIn i pokaż, iż codziennie uczysz się czegoś nowego
>>> wrzuć go na Facebooka, to się może przydać któremuś z Twoich znajomych
>>> Przypnij sobie tą stronkę to zakładek, może się przydać w przyszłości
Wolisz oglądać 📺 niż czytać – nie ma problemu
>>> Obserwuj i oglądaj KajoData na YouTube