0Pricing
SQL Academy · Lekcja

Grupowanie i etykietowanie danych

Zamieniaj wartości na kategorie

Grupowanie i etykietowanie danych to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Czym jest kategoryzowanie?

Kategoryzowanie polega na grupowaniu surowych wartości w nazwane kategorie — przekształcaniu liczb, dat lub kodów w czytelne dla człowieka etykiety.

Zamiast wyświetlać wynik 87, wyświetla się „Dobry”. Zamiast wyświetlać wiek 14 lat, wyświetla się „Nastolatek”. Głównym narzędziem do tego celu jest wyrażenie CASE.

Przykładowa tabela: orders

W całej tej lekcji będziemy używać tabeli orders. Każdy wiersz zawiera kwotę zamówienia i kod statusu.

Uruchom poniższe zapytanie, aby zobaczyć dane, z którymi będziemy pracować.

SELECT id, customer, amount, status
FROM orders
ORDER BY id;

Nadawanie etykiet za pomocą CASE WHEN

Najprostszy schemat kategoryzowania polega na sprawdzeniu warunku i przypisaniu etykiety. Blok CASE WHEN ... THEN ... ELSE ... END zwraca nowy tekst dla każdego wiersza.

W tym przypadku każde zamówienie oznaczamy jako „Duże” albo „Małe” na podstawie jego kwoty.

SELECT id,
       amount,
       CASE
         WHEN amount >= 500 THEN 'Large'
         ELSE 'Small'
       END AS order_size
FROM orders;

Wiele kategorii za pomocą łańcuchów WHEN

Można dodać tyle klauzul WHEN, ile potrzeba. SQL sprawdza je od góry do dołu i zatrzymuje się przy pierwszym dopasowaniu.

Ten przykład dzieli kwoty na trzy poziomy: Małe, Średnie i Duże.

SELECT id,
       amount,
       CASE
         WHEN amount < 100  THEN 'Small'
         WHEN amount < 500  THEN 'Medium'
         ELSE 'Large'
       END AS order_tier
FROM orders;

Kategoryzowanie wartości tekstowych

Kategorie nie dotyczą wyłącznie liczb. Można dopasowywać dokładne wartości tekstowe i zastępować je bardziej przyjaznymi etykietami.

W tym przypadku surowe kody statusu 'P', 'S' i 'C' stają się czytelnymi słowami.

SELECT id,
       status,
       CASE status
         WHEN 'P' THEN 'Pending'
         WHEN 'S' THEN 'Shipped'
         WHEN 'C' THEN 'Cancelled'
         ELSE 'Unknown'
       END AS status_label
FROM orders;

Używanie prostej formy CASE

Gdy jedna kolumna jest porównywana z kilkoma stałymi wartościami, prosta forma CASE (CASE column WHEN value ...) jest krótsza i łatwiejsza do odczytania niż powtarzanie nazwy kolumny w każdej klauzuli WHEN.

Wynik jest identyczny jak w przypadku formy przeszukiwanej.

SELECT id,
       CASE status
         WHEN 'P' THEN 'Pending'
         WHEN 'S' THEN 'Shipped'
         WHEN 'C' THEN 'Cancelled'
         ELSE 'Unknown'
       END AS status_label
FROM orders;

Kategoryzowanie wewnątrz GROUP BY

Gdy istnieje już etykieta kategorii, można grupować według niej, aby policzyć, ile wierszy przypada na każdą kategorię. Całe wyrażenie CASE należy umieścić wewnątrz GROUP BY.

To zapytanie pokazuje, ile zamówień należy do kategorii Małe, Średnie lub Duże.

SELECT
  CASE
    WHEN amount < 100  THEN 'Small'
    WHEN amount < 500  THEN 'Medium'
    ELSE 'Large'
  END AS order_tier,
  COUNT(*) AS total_orders
FROM orders
GROUP BY
  CASE
    WHEN amount < 100  THEN 'Small'
    WHEN amount < 500  THEN 'Medium'
    ELSE 'Large'
  END;

Kategoryzowanie z aliasem podzapytania

Powtarzanie długiego bloku CASE w GROUP BY jest rozwlekłe. Czytelniejsze rozwiązanie polega na opakowaniu głównego zapytania w podzapytanie (lub CTE), aby można było bezpośrednio odwołać się do aliasu.

SELECT order_tier, COUNT(*) AS total_orders
FROM (
  SELECT
    CASE
      WHEN amount < 100  THEN 'Small'
      WHEN amount < 500  THEN 'Medium'
      ELSE 'Large'
    END AS order_tier
  FROM orders
) AS bucketed
GROUP BY order_tier;

Kategorie liczbowe: grupy wiekowe

Grupowanie według wieku to klasyczny przypadek użycia kategoryzowania. Poniższe zapytanie przypisuje każdego klienta do nazwanej grupy wiekowej.

Proszę zauważyć, że warunki są uporządkowane od najmniejszego do największego — SQL zatrzymuje się przy pierwszym prawdziwym WHEN, dlatego kolejność ma znaczenie.

SELECT name,
       age,
       CASE
         WHEN age < 13 THEN 'Child'
         WHEN age < 18 THEN 'Teen'
         WHEN age < 65 THEN 'Adult'
         ELSE 'Senior'
       END AS age_group
FROM customers;

Nadawanie etykiet wartościom NULL w kategorii

Jeśli wartość to NULL, żadna klauzula WHEN (poza IS NULL) jej nie dopasuje. Bez jawnego sprawdzenia wartości NULL przechodzą do gałęzi ELSE.

Należy dodać klauzulę WHEN column IS NULL, aby nadać wartościom NULL własną etykietę.

SELECT id,
       amount,
       CASE
         WHEN amount IS NULL THEN 'No Data'
         WHEN amount < 100   THEN 'Small'
         WHEN amount < 500   THEN 'Medium'
         ELSE 'Large'
       END AS order_tier
FROM orders;

Kategoryzowanie w ORDER BY

Można również użyć wyrażenia CASE bezpośrednio wewnątrz ORDER BY, aby sterować priorytetem sortowania bez dodawania nowej kolumny.

Poniższy przykład zawsze wyświetla najpierw zamówienia Oczekujące, następnie Wysłane, a na końcu Anulowane.

SELECT id, customer, status
FROM orders
ORDER BY
  CASE status
    WHEN 'P' THEN 1
    WHEN 'S' THEN 2
    WHEN 'C' THEN 3
    ELSE 4
  END;

Szybki test

Sprawdźmy, jak dobrze rozumieją Państwo kategoryzowanie i nadawanie etykiet danym za pomocą CASE.

Podsumowanie lekcji

Świetna praca! Oto, czego nauczyli się Państwo o kategoryzowaniu i nadawaniu etykiet danym:

  • Kategoryzowanie przekształca surowe wartości w nazwane kategorie za pomocą CASE WHEN.
  • Łańcuchy klauzul WHEN tworzą wiele kategorii; SQL zatrzymuje się przy pierwszym dopasowaniu.
  • Forma prosta CASE (CASE col WHEN val) idealnie nadaje się do porównywania jednej kolumny ze stałymi wartościami.
  • Można użyć wyrażenia CASE w GROUP BY, aby policzyć wiersze w każdej kategorii.
  • Zawsze należy jawnie obsługiwać wartości NULL za pomocą WHEN col IS NULL, aby otrzymały znaczącą etykietę.
  • CASE działa również wewnątrz ORDER BY, umożliwiając określenie niestandardowego priorytetu sortowania.

Kategoryzowanie znacznie zwiększa czytelność raportów, zastępując surowe kody i liczby jasnymi, opisowymi etykietami.

Często zadawane pytania

Czy lekcja „Grupowanie i etykietowanie danych” jest bezpłatna?

Tak — pełny tekst „Grupowanie i etykietowanie danych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Grupowanie i etykietowanie danych”?

Zamieniaj wartości na kategorie Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Grupowanie i etykietowanie danych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wyrażenie CASE
  2. CASE wyszukiwane a proste
  3. Grupowanie i etykietowanie danych
  4. CASE w ORDER BY i agregacjach
← Powrót do SQL Academy