W PostgreSQL funkcja COALESCE zwraca pierwszy argument, który nie jest pusty. Zazwyczaj jest ona używana wraz z instrukcją SELECT, aby efektywnie obsługiwać wartości null.
Syntax: COALESCE (argument_1, argument_2, …);
Funkcja COALESCE przyjmuje nieograniczoną liczbę argumentów. Zwraca pierwszy argument, który nie jest pusty. Jeżeli wszystkie argumenty są puste, funkcja COALESCE zwróci wartość null. Funkcja COALESCE oblicza argumenty od lewej do prawej, aż znajdzie pierwszy argument nie będący zerem. Wszystkie pozostałe argumenty od pierwszego argumentu non-null nie są oceniane.
Przykład:
Dla celów demonstracyjnych utwórzmy najpierw tabelę (powiedzmy items
) za pomocą poniższego polecenia:
CREATE TABLE items ( ID serial PRIMARY KEY, product VARCHAR (100) NOT NULL, price NUMERIC NOT NULL, discount NUMERIC);
W items
tabeli znajdują się cztery pola:
- id: klucz główny identyfikujący element w tabeli items.
- produkt: nazwa produktu.
- cena: cena produktu.
- rabat: rabat produktu.
Teraz wstawimy kilka rekordów do items
tabeli używając instrukcji INSERT w następujący sposób:
INSERT INTO items (product, price, discount)VALUES ('A', 1000, 10), ('B', 1500, 20), ('C', 800, 5), ('D', 500, NULL);
W końcu zapytamy o ceny netto produktów używając następującego zapytania:
SELECT product, (price - discount) AS net_priceFROM items;
To doprowadzi do następujących wyników:
Jeśli spojrzysz na czwarty wiersz, zauważysz, że cena netto produktu D jest zerowa, co wydaje się niepoprawne. Problem polega na tym, że rabat produktu D jest zerowy, dlatego też, gdy przyjmiemy wartość null do obliczenia ceny netto, PostgreSQL zwraca wartość null. Aby uzyskać właściwą cenę, musimy założyć, że jeśli rabat jest null, to wynosi zero. Następnie możemy użyć funkcji COALESCE w następujący sposób:
SELECT product, (price - COALESCE(discount, 0)) AS net_priceFROM items;
Wyjście: