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 każdego 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 |
---|---|
1 | 12 |
2 – 5 | 317 |
6 – 10 | 415 |
>10 | 49 |
Widzimy, że 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.
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śli chcesz nauczyć się więcej takich technik, polecam moje kursy na KajoData!
Wolisz czytać po angielsku? No problem!
Inne ciekawe 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ż, że 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