0Pricing
SQL Academy · Lekcja

COALESCE i NULLIF

Ustawiaj wartości domyślne i unikaj dzielenia przez zero

COALESCE i NULLIF 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.

Zastępowanie brakujących wartości

Wykrywanie wartości NULL to dopiero połowa sukcesu — często chcą je Państwo zastąpić sensowną wartością domyślną. Funkcja COALESCE w SQL robi dokładnie to.

A gdy chcą Państwo utworzyć wartość NULL celowo, na przykład aby uniknąć dzielenia przez zero, służy do tego NULLIF. Ta lekcja omawia oba rozwiązania.

-- Show a placeholder when phone is missing
SELECT name, COALESCE(phone, 'no phone on file') AS phone
FROM customers;

Jak działa COALESCE

COALESCE przyjmuje dowolną liczbę argumentów i zwraca pierwszy różny od NULL, od lewej do prawej.

Jeśli każdy argument ma wartość NULL, wynikiem jest NULL. Można myśleć o tej funkcji jak o poleceniu: „użyj tego, albo tamtego, a na końcu tej wartości zastępczej”.

SELECT
  COALESCE(NULL, NULL, 'third', 'fourth') AS a, -- 'third'
  COALESCE(NULL, 42)                       AS b, -- 42
  COALESCE(NULL, NULL)                     AS c; -- NULL

Łańcuch wartości zastępczych

Ponieważ COALESCE przyjmuje wiele argumentów, mogą Państwo zbudować łańcuch preferencji.

Można na przykład preferować numer komórkowy, następnie służbowy, potem domowy, a na końcu stały komunikat.

SELECT name,
  COALESCE(mobile, work_phone, home_phone, 'unreachable') AS best_contact
FROM contacts;

Wartości domyślne w obliczeniach

NULL propaguje się przez działania arytmetyczne, dlatego pojedyncza brakująca wartość może sprawić, że całe obliczenie przyjmie wartość NULL. Należy objąć wartość mogącą być NULL funkcją COALESCE, aby podstawić neutralną wartość.

W tym przypadku brakujący rabat jest traktowany jako 0.

-- Without COALESCE, a NULL discount makes total NULL
SELECT
  price - COALESCE(discount, 0) AS total
FROM line_items;

Zasady typów funkcji COALESCE

Wszystkie argumenty funkcji COALESCE muszą mieć zgodne typy. PostgreSQL wybiera wspólny typ i zgłasza błąd, jeśli nie może go wybrać.

Nie można na przykład mieszać liczby i ciągu tekstowego bez rzutowania — wartość zastępcza również musi być liczbą.

-- OK: both integers
SELECT COALESCE(score, 0) FROM results;

-- Cast when mixing types
SELECT COALESCE(score::text, 'n/a') FROM results;

Poznaj NULLIF

NULLIF(a, b) działa niejako odwrotnie niż COALESCE: zwraca NULL, gdy a = b, a w przeciwnym razie zwraca a.

To zwięzły sposób na przekształcenie konkretnej wartości sygnalizacyjnej w prawdziwą wartość NULL.

SELECT
  NULLIF(5, 5)   AS a,  -- NULL (equal)
  NULLIF(5, 9)   AS b,  -- 5    (not equal)
  NULLIF('', '') AS c;  -- NULL (treat empty string as missing)

NULLIF przy dzieleniu przez zero

Klasycznym zastosowaniem funkcji NULLIF jest unikanie błędów dzielenia. Dzielenie przez 0 powoduje błąd, ale dzielenie przez NULL po prostu daje wynik NULL.

Należy objąć dzielnik wyrażeniem NULLIF(divisor, 0), aby zamienić awarię na bezpieczną wartość NULL.

-- If total_visits is 0, this would error.
-- NULLIF turns the divisor into NULL, giving a NULL ratio instead.
SELECT
  conversions / NULLIF(total_visits, 0) AS conversion_rate
FROM campaigns;

Łączenie NULLIF i COALESCE

NULLIF i COALESCE dobrze ze sobą współpracują. Należy użyć NULLIF, aby przekształcić wartość sygnalizacyjną w NULL, a następnie COALESCE, aby nadać tej wartości NULL przyjazną wartość domyślną.

W tym przypadku pusty tekst notatki staje się dosłownym tekstem „—”.

-- Treat '' as missing, then display a dash
SELECT
  COALESCE(NULLIF(note, ''), '—') AS display_note
FROM tickets;

Bezpieczny iloraz średnich

Połączmy te rozwiązania w solidnym zapytaniu analitycznym: zabezpieczmy się przed dzieleniem przez zero za pomocą NULLIF, a następnie wyświetlmy 0 zamiast NULL za pomocą COALESCE.

Zapytanie nigdy nie powoduje błędu i zawsze wyświetla czytelną liczbę.

SELECT
  product_id,
  COALESCE(returns / NULLIF(orders, 0), 0) AS return_rate
FROM product_stats;

COALESCE a IS NULL

Oba rozwiązania dotyczą wartości NULL, ale służą innym celom:

  • IS NULL / IS NOT NULL — sprawdzają brakujące wartości w warunku.
  • COALESCE — zastępuje wartość w wyniku.

Po COALESCE należy sięgać podczas kształtowania wyników, a po IS NULL podczas filtrowania.

-- Filter (IS NULL)
SELECT * FROM customers WHERE phone IS NULL;

-- Substitute (COALESCE)
SELECT COALESCE(phone, 'unknown') FROM customers;

Połączenie wszystkiego

Szybka ściąga do tej lekcji:

  • COALESCE(a, b, c) → pierwsza wartość różna od NULL.
  • NULLIF(a, b) → NULL, gdy wartości są równe, w przeciwnym razie a.
  • Należy używać NULLIF(divisor, 0), aby uniknąć dzielenia przez zero.
  • Należy używać COALESCE, aby nadawać wartości domyślne w obliczeniach i wynikach.
SELECT
  COALESCE(nickname, full_name, 'guest')       AS display_name,
  revenue / NULLIF(orders, 0)                  AS avg_order_value
FROM accounts;

Szybki test

Co zwraca NULLIF(amount, 0), gdy amount ma wartość 0?

Podsumowanie

Mogą już Państwo zastępować wartości NULL wartościami domyślnymi za pomocą COALESCE (wygrywa pierwsza wartość różna od NULL) oraz celowo tworzyć wartości NULL za pomocą NULLIF (NULL, gdy dwie wartości są takie same).

Poznali Państwo wzorzec unikania dzielenia przez zero oraz sposób łączenia obu funkcji, aby uzyskać bezpieczny i przejrzysty wynik. Następnie dowiedzą się Państwo, jak wartości NULL zachowują się wewnątrz COUNT, SUM i złączeń.

SELECT
  COALESCE(NULLIF(comment, ''), 'no comment') AS comment,
  total / NULLIF(qty, 0)                       AS unit_price
FROM invoices;

Często zadawane pytania

Czy lekcja „COALESCE i NULLIF” jest bezpłatna?

Tak — pełny tekst „COALESCE i NULLIF” 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 „COALESCE i NULLIF”?

Ustawiaj wartości domyślne i unikaj dzielenia przez zero Ć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 „COALESCE i NULLIF”?

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. Co naprawdę oznacza NULL
  2. IS NULL i IS NOT NULL
  3. COALESCE i NULLIF
  4. NULL w agregacjach i złączeniach
← Powrót do SQL Academy