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 raziea.- 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.