Tworzenie histogramu w SQL – praktyczne podejście z subquery, CTE i CASE WHEN

kajodata.com 5 dni temu

Histogramy są jednym z najpopularniejszych narzędzi do analizy dystrybucji danych. Choć najczęściej kojarzymy je z wizualnymi wykresami, ich logika i wartości analityczne mogą zostać z powodzeniem odwzorowane w SQL. W tym artykule pokażę, jak krok po kroku stworzyć prosty histogram w SQL, korzystając z subquery, Common Table Expressions (CTE) oraz CASE WHEN.

1. Co to jest histogram i jak wykorzystać go w SQL?

Histogram to sposób na przedstawienie rozkładu danych, który pozwala nam analizować częstotliwość występowania określonych wartości w zbiorze danych. W SQL możemy uzyskać te informacje poprzez odpowiednią agregację danych, co pomoże nam zrozumieć strukturę danych – na przykład ilu klientów złożyło określoną liczbę zamówień.

W naszym przykładzie zaczynamy od tabeli zawierającej dane klientów i ich zamówień. Chcemy dowiedzieć się, jak rozkładają się liczby zamówień – czy większość klientów składa tylko jedno zamówienie, czy raczej mamy lojalnych klientów z wieloma transakcjami.

2. Pierwsze kroki – grupowanie danych

Aby zacząć analizę, możemy policzyć, ile zamówień przypada na każdego klienta. W tym celu korzystamy z GROUP BY oraz funkcji agregującej COUNT:

SELECT customer_id, COUNT(DISTINCT order_id) AS order_cnt FROM orders GROUP BY customer_id; Wynik to tabela, w której dla wszystkich klienta widzimy liczbę jego zamówień.

3. Subquery – zliczanie klientów w przedziałach

Następny krok to policzenie liczby klientów, którzy złożyli określoną liczbę zamówień. W tym celu możemy użyć subquery:

SELECT order_cnt, COUNT(DISTINCT customer_id) AS customer_cnt FROM ( SELECT customer_id, COUNT(DISTINCT order_id) AS order_cnt FROM orders GROUP BY customer_id ) s GROUP BY order_cnt;

W tym miejscu mamy już tabelę pokazującą, ilu klientów złożyło konkretną liczbę zamówień. To nasz surowy histogram, jednak chcemy jeszcze go uprościć.

4. Tworzenie przedziałów (bucketów) z CASE WHEN

Przy dużych zbiorach danych liczba unikalnych wartości zamówień może być zbyt duża, aby wyniki były czytelne. Dlatego tworzymy przedziały (bucketowanie), używając konstrukcji CASE WHEN. Dzięki temu możemy zgrupować klientów według zakresów liczby zamówień, np. 1 zamówienie, od 2 do 5, od 6 do 10 itd.

SELECT CASE WHEN order_cnt = 1 THEN '1' WHEN order_cnt < 6 THEN '2 - 5' WHEN order_cnt < 11 THEN '6 - 10' ELSE '>10' END AS customer_group, SUM(customer_cnt) AS customer_group_cnt FROM ( SELECT order_cnt, COUNT(DISTINCT customer_id) AS customer_cnt FROM ( SELECT customer_id, COUNT(DISTINCT order_id) AS order_cnt FROM orders GROUP BY customer_id ) s GROUP BY order_cnt ) cc GROUP BY customer_group;

Wynikiem jest tabela, która pokazuje liczbę klientów w określonych przedziałach zamówień.

5. Interpretacja wyników

Otrzymane dane mogą wyglądać następująco:

Przedział zamówieńLiczba klientów
112
2 – 5317
6 – 10415
>1049

Widzimy, iż większość klientów składa od 2 do 10 zamówień, a tylko nieliczni mają ich więcej niż 10. Taka analiza pozwala zrozumieć strukturę klientów i może być pomocna np. w segmentacji lojalnościowej.

Opanuj SQL z moim kursem.

Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.

Podsumowanie

Przedstawiona metoda to skuteczny sposób na analizę dystrybucji danych w SQL. Dzięki subquery, CTE i CASE WHEN możemy nie tylko efektywnie grupować dane, ale także prezentować wyniki w formie czytelnych kategorii. jeżeli chcesz nauczyć się więcej takich technik, polecam moje kursy na KajoData!

Inne interesujące artykuły:

  • Jak zostać analitykiem danych? Co musi umieć analityk? Kompletny przewodnik.
  • Czyszczenie danych (Data Cleaning) – 5 kroków do czystych danych
  • 9 błędów na LinkedIn, które niszczą Twoje szanse na znalezienie pracy
  • Zmienna, typy danych i operatory w Pythonie
  • Brak pracy dla juniorów – jak zostać analitykiem danych?

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

Idź do oryginalnego materiału