Jak działa CASE WHEN w języku SQL? Przykłady zastosowania

Jak działa CASE WHEN w języku SQL? Przykłady zastosowania

W SQL istnieje wiele konstrukcji, które pozwalają na manipulację danymi oraz ich sprawną analizę. Jednym z najczęściej używanych narzędzi do wykonywania warunkowych operacji w zapytaniach SQL jest CASE WHEN. Jest to instrukcja warunkowa, która pozwala zwracać różne wartości w zależności od spełnienia określonych warunków. Dzięki niej możemy dynamicznie przekształcać dane i dostosowywać wyniki do własnych potrzeb.

Podstawowa składnia CASE WHEN

Instrukcja CASE WHEN działa na zasadzie „jeśli warunek jest spełniony, zwróć wartość A, w przeciwnym razie zwróć wartość B”. Oto jej podstawowa składnia:


CASE 
    WHEN warunek1 THEN wynik1
    WHEN warunek2 THEN wynik2
    ...
    ELSE wynik_domyslny
END

Opcjonalne ELSE określa wartość, która zostanie zwrócona, jeśli żaden z warunków nie zostanie spełniony. Jeśli go pominiemy i nie zajdzie żaden z warunków, wynik będzie NULL.

Przykłady zastosowania CASE WHEN

1. Kategoryzowanie danych

Załóżmy, że mamy tabelę pracownicy zawierającą kolumnę pensja, a naszym zadaniem jest przypisanie każdego pracownika do jednej z trzech kategorii: „Niska”, „Średnia” lub „Wysoka”. Możemy to zrobić w następujący sposób:


SELECT imie, nazwisko, pensja,
       CASE 
           WHEN pensja < 3000 THEN 'Niska'
           WHEN pensja BETWEEN 3000 AND 7000 THEN 'Średnia'
           ELSE 'Wysoka'
       END AS kategoria_pensji
FROM pracownicy;

Wynik takiego zapytania może wyglądać następująco:

imie nazwisko pensja kategoria_pensji
Jan Kowalski 2500 Niska
Anna Nowak 5000 Średnia
Piotr Wiśniewski 8000 Wysoka

2. Obsługa wartości NULL

Jeśli w naszej bazie danych znajdują się wartości NULL, możemy je w prosty sposób zastąpić domyślną wartością, np.:


SELECT imie, nazwisko, 
       CASE 
           WHEN telefon IS NULL THEN 'Brak numeru'
           ELSE telefon
       END AS numer_telefonu
FROM pracownicy;

Dzięki temu w wynikach zapytania zamiast pustych wartości pojawi się tekst „Brak numeru”.

3. Użycie w klauzuli ORDER BY

Instrukcja CASE WHEN może być również używana do niestandardowego sortowania. Jeśli chcemy, aby pracownicy z wysokimi zarobkami pojawili się na początku, możemy napisać:


SELECT imie, nazwisko, pensja
FROM pracownicy
ORDER BY 
    CASE 
        WHEN pensja > 7000 THEN 1
        WHEN pensja BETWEEN 3000 AND 7000 THEN 2
        ELSE 3
    END;

4. Zastosowanie w agregacji

Możemy również użyć CASE WHEN w połączeniu z funkcjami agregującymi, np. aby policzyć ilu pracowników zarabia w poszczególnych przedziałach:


SELECT 
    CASE 
        WHEN pensja < 3000 THEN 'Niska'
        WHEN pensja BETWEEN 3000 AND 7000 THEN 'Średnia'
        ELSE 'Wysoka'
    END AS kategoria_pensji,
    COUNT(*) AS liczba_pracownikow
FROM pracownicy
GROUP BY 
    CASE 
        WHEN pensja < 3000 THEN 'Niska'
        WHEN pensja BETWEEN 3000 AND 7000 THEN 'Średnia'
        ELSE 'Wysoka'
    END;

Najczęstsze błędy przy używaniu CASE WHEN

Podczas korzystania z CASE WHEN można napotkać kilka typowych błędów:

  • Brak klauzuli ELSE – jeśli wszystkie warunki zwrócą wynik negatywny, wynik będzie NULL, co może prowadzić do nieoczekiwanych rezultatów.
  • Nieprzewidziane typy danych – zwracane wartości w każdej gałęzi instrukcji CASE powinny być tego samego typu (np. wszystkie tekstowe albo wszystkie liczbowe).
  • Nadmierne zagnieżdżanie – zbyt skomplikowane warunki mogą sprawić, że kod stanie się trudny do utrzymania. Warto wtedy rozważyć inne podejście.

Podsumowanie

Instrukcja CASE WHEN to niezwykle potężne narzędzie w języku SQL, które pozwala na elastyczne manipulowanie danymi. Możemy jej używać w instrukcjach SELECT, ORDER BY, GROUP BY oraz w warunkach agregacji. Dzięki niej możemy kategoryzować dane, obsługiwać wartości NULL czy dynamicznie modyfikować sposób prezentacji wyników.

Dobrze opanowanie CASE WHEN pozwala na bardziej efektywne i czytelne zapytania, które ułatwiają codzienną pracę z bazami danych. Warto więc eksperymentować i dostosowywać tę instrukcję do własnych potrzeb.

 

Inny ciekawy artykuł:

Jak działa EXCEPT w języku SQL? Przykłady zastosowania

KajoDataSpace