0Pricing
Coding Interview Prep · Lekcja

Wyrażenia CASE w SELECT

Pisanie wbudowanej logiki warunkowej oraz używanie prostej i wyszukiwanej postaci CASE

Wyrażenia CASE w SELECT to bezpłatna lekcja Coding Interview Prep na CoddyKit. To lekcja 4 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 Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

CASE: warunkowe wyrażenie SQL

CASE jest odpowiednikiem if/then/else w SQL, ale stanowi wyrażenie zwracające jedną wartość — dlatego działa wszędzie tam, gdzie można użyć wartości: w SELECT, WHERE, ORDER BY, a nawet wewnątrz funkcji agregujących.

SELECT order_id,
       amount,
       CASE WHEN amount > 100 THEN 'large' ELSE 'small' END AS size
FROM orders;

Wyszukiwana postać CASE

Wyszukiwany CASE sprawdza warunek logiczny dla każdego WHEN i zwraca wynik pierwszego dopasowania. Jest to najbardziej elastyczna postać, a kolejność ma znaczenie — wygrywa pierwszy prawdziwy warunek.

SELECT score,
       CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         WHEN score >= 70 THEN 'C'
         ELSE 'F'
       END AS grade
FROM exam_results;

Prosta postać CASE

Prosty CASE porównuje jedno wyrażenie z listą wartości. Jest krótszy w przypadku sprawdzania równości, ale nie obsługuje zakresów ani testów NULL.

SELECT status_code,
       CASE status_code
         WHEN 1 THEN 'active'
         WHEN 2 THEN 'paused'
         WHEN 3 THEN 'closed'
         ELSE 'unknown'
       END AS status_label
FROM accounts;

Wyszukiwany a prosty CASE: kiedy używać którego

Prostego CASE należy używać do sprawdzania równości ze stałymi wartościami, a wyszukiwanego CASE do zakresów lub NULL. Najważniejsza pułapka: prosty CASE nigdy nie dopasuje NULL — w wyszukiwanej postaci należy użyć IS NULL.

-- Simple CASE will NOT catch NULL here
SELECT CASE WHEN bonus IS NULL THEN 'no bonus'
            ELSE 'has bonus'
       END AS bonus_flag
FROM employees;

Kolejność gałęzi WHEN ma znaczenie

Ponieważ wygrywa pierwsza pasująca gałąź, należy układać klauzule WHEN od najbardziej szczegółowych do najbardziej ogólnych. Jeśli najpierw zostanie umieszczony zbyt ogólny próg, wynik 95 może otrzymać niewłaściwą etykietę.

-- Correct order: highest threshold first
SELECT CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         ELSE 'C or below'
       END AS grade
FROM exam_results;

ELSE i niejawne NULL

Jeśli nic nie pasuje, a klauzula ELSE zostanie pominięta, CASE zwróci NULL. Należy dodać jawne ELSE z wartością domyślną, aby nieoczekiwane wartości nie stawały się po cichu NULL.

-- No ELSE: anything not 1/2 becomes NULL
SELECT CASE flag WHEN 1 THEN 'yes' WHEN 2 THEN 'no' END AS label
FROM toggles;

Agregacja warunkowa (wzorzec tabeli przestawnej)

Najcenniejsza sztuczka podczas rozmowy technicznej to agregacja warunkowa. Należy umieścić CASE wewnątrz SUM lub COUNT, aby podczas jednego przebiegu zliczyć wiersze według kategorii — tworząc przejrzysty raport w stylu tabeli przestawnej.

SELECT
  SUM(CASE WHEN status = 'paid'    THEN 1 ELSE 0 END) AS paid_orders,
  SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders,
  SUM(CASE WHEN status = 'paid'    THEN amount ELSE 0 END) AS paid_revenue
FROM orders;

COUNT ignoruje NULL: skrót z użyciem CASE

Ponieważ COUNT ignoruje wartości NULL, można pominąć ELSE, aby wiersze bez dopasowania stały się NULL i nie zostały zliczone. Jest to nieco krótszy sposób wykonywania zliczania warunkowego.

SELECT
  COUNT(CASE WHEN status = 'paid' THEN 1 END)    AS paid_orders,
  COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders
FROM orders;

CASE w ORDER BY do niestandardowego sortowania

Należy umieścić CASE w ORDER BY, aby sortować według niestandardowych priorytetów zamiast zwykłej kolejności alfabetycznej lub numerycznej — na przykład pilne elementy przed zwykłymi, a te przed wszystkimi pozostałymi.

SELECT order_id, status
FROM orders
ORDER BY
  CASE status
    WHEN 'urgent' THEN 1
    WHEN 'normal' THEN 2
    ELSE 3
  END,
  order_id;

Zgodność typów między gałęziami

Wszystkie gałęzie CASE muszą zwracać zgodny typ. Połączenie liczby i tekstu może spowodować błąd albo wymusić rzutowanie — należy wybrać jeden typ wyniku i w razie potrzeby jawnie wykonać rzutowanie.

-- Keep branches the same type
SELECT CASE WHEN qty > 0 THEN CAST(qty AS VARCHAR)
            ELSE 'none'
       END AS qty_label
FROM inventory;

CASE w WHERE do warunkowego filtrowania

CASE w WHERE pozwala stosować różną logikę filtrowania zależnie od flagi — na przykład inny próg ceny dla każdego regionu. Często jest to czytelniejsze niż zawiła kombinacja AND i OR.

SELECT order_id, amount, region
FROM orders
WHERE amount > CASE region
                 WHEN 'US'  THEN 100
                 WHEN 'EU'  THEN 90
                 ELSE 50
               END;

Szybkie sprawdzenie

Przewidź wynik.

Podsumowanie

Podsumowanie: CASE zwraca jedną wartość i działa w SELECT, WHERE, ORDER BY oraz funkcjach agregujących. Wyszukiwana postać obsługuje zakresy i NULL; wygrywa pierwsze dopasowanie; brak dopasowania oznacza NULL; typy zwracane przez gałęzie muszą być zgodne.

Często zadawane pytania

Czy lekcja „Wyrażenia CASE w SELECT” jest bezpłatna?

Tak — pełny tekst „Wyrażenia CASE w SELECT” 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 Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyrażenia CASE w SELECT”?

Pisanie wbudowanej logiki warunkowej oraz używanie prostej i wyszukiwanej postaci CASE Ćwiczysz Coding Interview Prep 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ąć Coding Interview Prep?

Nie wymagamy żadnego doświadczenia. Coding Interview Prep 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 4 z 4.

Ile czasu zajmuje lekcja „Wyrażenia CASE w SELECT”?

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 Coding Interview Prep?

Tak. Każda lekcja Coding Interview Prep 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. Projekcja kolumn i pułapki aliasów
  2. Kolumny obliczane i pierwszeństwo operatorów
  3. DISTINCT a GROUP BY w uzyskiwaniu unikatowości
  4. Wyrażenia CASE w SELECT
← Powrót do Coding Interview Prep