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

6 grudnia 2024

Histogram w SQL - Przykład subquery,  CTE i CASE WHEN

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
112
2 – 5317
6 – 10415
>1049

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.

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:

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

Ja Ci ją z przyjemnością wyślę. Za darmo. Bez spamu.

Poradnik Początkującego Analityka

Video - jak szukać pracy w IT

Regularne dawki darmowej wiedzy, bez spamu.