CodeGym /Kursy /SQL SELF /Przykłady pracy z NULL w realnych zadaniach: obliczenia, ...

Przykłady pracy z NULL w realnych zadaniach: obliczenia, filtrowanie, sortowanie

SQL SELF
Poziom 10 , Lekcja 3
Dostępny

Praca z NULL pojawia się w różnych sytuacjach: od ogarniania brakujących danych w raportach po filtrowanie i sortowanie. Gdyby był wybór między brakiem wartości w tabeli a dziwną liczbą typu 9999, większość wybrałaby NULL — serio, to nie jest najwygodniejsze, ale przynajmniej uczciwe. Zobaczmy kilka typowych case’ów.

Przykład: sortowanie produktów z brakującymi cenami

Wyobraź sobie, że prowadzisz sklep internetowy i masz tabelę produktów:

product_id name price
1 Telefon 45000
2 Laptop NULL
3 Aparat 25000
4 Smartwatch NULL

Chcemy posortować produkty po cenie, przy czym produkty bez ceny (NULL) mają być na końcu.

SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;

Wynik:

product_id name price
3 Aparat 25000
1 Telefon 45000
2 Laptop NULL
4 Smartwatch NULL

Zwróć uwagę na kluczową konstrukcję NULLS LAST. Domyślnie w PostgreSQL dla ASC wartości NULL lądują na początku, ale z tym parametrem wrzucamy je na koniec.

Przykład: filtrowanie studentów bez daty urodzenia

Mamy tabelę studentów i chcemy wybrać tylko tych, którym nie wpisano daty urodzenia.

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

Zapytanie:

SELECT student_id, name
FROM students
WHERE birth_date IS NULL;

Wynik:

student_id name
2 Anna Song
4 Maria Chi

Udało się wyciągnąć info o studentach, którym nie znamy daty urodzenia.

Przykłady użycia funkcji do ogarniania NULL

Przykład: obliczanie sumy końcowej z uwzględnieniem możliwych NULL

W tabeli zamówień trzymamy kwoty zamówień. Ale nie zawsze są one wpisane, więc musimy brać pod uwagę, że czasem suma to 0.

Przykładowe dane:

order_id customer_name order_amount
1 Alex 1200
2 Maria 2500
3 Max NULL
4 Xena 3100

Zapytanie:

SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;

Wynik:

total_amount
6800

Używamy COALESCE(order_amount, 0), żeby podmienić NULL na 0 przed sumowaniem. Dzięki temu unikamy błędów albo dziwnych wyników.

Przykład: wyświetlanie tekstu zamiast NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

W raporcie trzeba wyświetlić tekst "Nie podano" dla wszystkich pustych danych zamiast NULL.

SELECT
    customer_name, 
    COALESCE(order_amount::TEXT, 'Nie podano') AS order_status
FROM orders;

Wynik:

customer_name order_status
Alex 1200
Maria 2500
Max Nie podano
Xena 3100

COALESCE() pozwala wyświetlić dowolny tekst, jeśli wartość to NULL.

Bardziej złożone scenariusze pracy z NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

Naszym zadaniem jest posortować zamówienia tak, żeby te z brakującą kwotą były na początku, a potem od największej do najmniejszej kwoty.

SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;

Wynik:

customer_name order_amount
Max NULL
Xena 3100
Maria 2500
Alex 1200

Tutaj użyliśmy NULLS FIRST, żeby NULL były przed resztą.

Przykład: filtrowanie danych z podmianą wartości NULL

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

W niektórych raportach trzeba wyświetlić tylko te wiersze, gdzie wartość jest wpisana albo podmienić ją na "Nieznane", jeśli to NULL.

SELECT
    student_id, 
    name, 
    COALESCE(birth_date::TEXT, 'Nieznane') AS birth_date_info
FROM students;

Wynik:

student_id name birth_date_info
1 Otto Art 2000-01-15
2 Anna Song Nieznane
3 Alex Lin 1999-05-10
4 Maria Chi Nieznane

To szczególnie przydatne przy robieniu raportów, gdzie ważne jest pokazanie, że danych brak.

Praktyczne wskazówki

Praca z NULL wymaga większej uwagi. Oto kilka przydatnych tipów:

  • Używaj IS NULL i COALESCE() do sprawdzania i podmieniania brakujących wartości.
  • Pamiętaj, że funkcje agregujące ignorują NULL, poza COUNT(*).
  • Przy sortowaniu pamiętaj o słowach kluczowych NULLS FIRST i NULLS LAST.
  • W raportach zawsze napisz, jak ogarniasz NULL, żeby nie było nieporozumień z ekipą.

Takie ogarnięcie tematu pozwoli Ci nie tylko pisać poprawne zapytania, ale też zrobić wrażenie na rozmowie o pracę. Bo umiejętność pracy z realnymi danymi zawsze jest bardziej ceniona niż sama teoria!

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION