Maybaygiare.org

Blog Network

How to use COALESCE in PostgreSQL

Samenvatting: dit artikel bespreekt methoden voor het verwerken van nulwaarden in PostgreSQL met behulp van de COALESCE functie. Onderwerpen besproken met voorbeelden zijn:

1. Wat is een COALESCE functie?

a. enkele kanttekeningen

2. Het voorkomen van NULL waarden met COALESCE

In dit bericht, gaan we begrijpen wat de COALESCE functie is en hoe het te gebruiken in PostgreSQL.

Wat is een COALESCE-functie?

COALESCE is een systeem ingebouwde functie die kan worden beschouwd als een van de voorwaardelijke expressies beschikbaar in PostgreSQL. NULLIF, GREATEST, LEAST en COALESCE zijn de soorten voorwaardelijke uitdrukkingen in PostgreSQL.

De COALESCE functie retourneert de eerste niet-NULL expressie in de opgegeven lijst. Als alle argumenten NULL zijn, zal het NULL Als uitvoer teruggeven.

de ondersteunde syntaxis is:

COALESCE(value_1,value_2,value_3,........value_n)

de parameters of argumenten zijn:

value_1,value_2,value_3,........value_n

afwijkingen

enkele punten over de COALESCE-functie:

  • de parameters worden getest op niet-nulwaarden.
  • de parameters moeten allemaal hetzelfde datatype zijn. Anders zal het resulteren in een fout.
  • de COALESCE functie accepteert een onbeperkt aantal argumenten.
  • het neemt de argumenten van links naar rechts.
  • Coalesce functie biedt vergelijkbare compatibiliteit zoals NVL en IFNULL die beschikbaar zijn in andere DBMS.
  • CASE en COALESCE kunnen voor soortgelijke doeleinden worden gebruikt, maar het voordeel van COALESCE is dat het veel minder typen vereist.
  • het zal stoppen met het evalueren van parameters zodra de eerste niet-nulwaarde is bereikt.

voorbeelden

1. Hier is hoe COALESCE werkt met een niet-NULL waarde voor de eerste parameter:

postgres=# select coalesce (1,null,2); coalesce ---------- 1(1 row)

De COALESCE functie vindt de eerste niet-NULL expressie aan het begin, dus het zal altijd hetzelfde resultaat produceren ongeacht wat de resterende parameters bevatten.

2. Hier is hoe COALESCE werkt als een NULL waarde de eerste parameter is:

postgres=# select coalesce (null,1,2); coalesce ---------- 1(1 row)

De COALESCE functie vond een NULL waarde in de eerste parameter, dus ging het door naar de tweede parameter, die niet NULL was, zodat de waarde van de parameter werd geretourneerd.

3. Hier is hoe het meerdere NULL waarden interpreteert:

postgres=# SELECT coalesce(null,null, 1, 2, 3, null, 4); coalesce ---------- 1(1 row)

Er zijn meerdere NULLs in deze expressie, maar omdat de eerste niet-NULL waarde werd bereikt op de derde parameter, werden alle resterende waarden genegeerd.

4. Als de gegevenstypen van de parameters NIET overeenkomen, zal dit een fout veroorzaken:

postgres=# SELECT coalesce(1,now(),null);ERROR: COALESCE types integer and timestamp with time zone cannot be matched

de eerste parameter is een geheel getal, en de functie now() geeft een tijdstempel met Tijdzone terug. Omdat deze parameters niet van hetzelfde type zijn, is de handtekening van de functie ongeldig, en dus produceert en fout.

5. U kunt andere functies als parameters gebruiken binnen de COALESCE-functie:

postgres=# SELECT coalesce(nvl(null,199),least(8,null),avg(9.9)); coalesce ---------- 199(1 row)

nulwaarden voorkomen met COALESCE

een nuttige toepassing van de COALESCE-functie is om te voorkomen dat NULL-waarden verschijnen in query-resultaten.

voorbeeld

1. Maak een tabel “sales”aan met het CREATE TABLE Commando:

postgres=# CREATE TABLE sales (serial_id int primary key, product_name varchar(50), amount numeric, discount numeric); CREATE TABLE

2. Voeg gegevens in tabel “verkoop”:

postgres=# INSERT INTO sales VALUES (121,'paste',1000,10), (144,'brush',1500,20), (166,'soap',800,0), (178,'coffee',500,NULL);INSERT 0 4

3. Als we proberen uit te voeren een waarde in de kolom “korting” af te trekken van een waarde in de kolom “bedrag”, zal de laatste rij een nulwaarde retourneren. Dit komt omdat elke rekenkunde uitgevoerd op een NULL waarde zal resulteren in NULL.

postgres=# SELECT amount - discount as "final bill" FROM sales; final bill ------------ 990 1480 800 <=Null(4 rows)

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.