sql >> Database >  >> RDS >> PostgreSQL

Retourneert nul als er geen record is gevonden

Je zou kunnen:

SELECT COALESCE(SUM(columnA), 0) FROM my_table WHERE columnB = 1
INTO res;

Dit werkt toevallig, omdat uw zoekopdracht een verzamelfunctie heeft en daarom altijd geeft een rij terug, zelfs als er niets wordt gevonden in de onderliggende tabel.

Gewone zoekopdrachten zonder aggregaat zouden geen rij opleveren in zo'n geval. COALESCE zou nooit gebeld worden en kon je niet redden. Terwijl we met een enkele kolom te maken hebben, kunnen we in plaats daarvan de hele query omwikkelen:

SELECT COALESCE( (SELECT columnA FROM my_table WHERE ID = 1), 0)
INTO res;

Werkt ook voor uw oorspronkelijke zoekopdracht:

SELECT COALESCE( (SELECT SUM(columnA) FROM my_table WHERE columnB = 1), 0)
INTO res;

Meer over COALESCE() in de handleiding.
Meer over aggregatiefuncties in de handleiding.
Meer alternatieven in dit latere bericht:

  • Hoe een waarde van een functie te retourneren als er geen waarde is gevonden


  1. Oracle Database Client stap voor stap installeren

  2. Alternatief voor Intersect in MySQL

  3. Wat is een gegenereerde kolom?

  4. MySQL-equivalent van DECODE-functie in Oracle