PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zwróć zero, jeśli nie znaleziono żadnego rekordu

Możesz:

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

Tak się składa, ponieważ Twoje zapytanie ma funkcję agregującą, a co za tym idzie zawsze zwraca wiersz, nawet jeśli nic nie zostało znalezione w tabeli poniżej.

Zwykłe zapytania bez agregacji zwróciłyby brak wiersza w takim przypadku. COALESCE nigdy nie zostałby wezwany i nie mógłby cię uratować. Mając do czynienia z pojedynczą kolumną, możemy zamiast tego zawinąć całe zapytanie:

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

Działa również w przypadku pierwotnego zapytania:

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

Więcej o COALESCE() w instrukcji.
Więcej informacji o funkcjach agregujących w instrukcji.
Więcej alternatywnych w tym późniejszym poście:

  • Jak zwrócić wartość z funkcji, jeśli nie znaleziono żadnej wartości


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można uruchomić Postgresa

  2. GroupingError:ERROR:kolumna musi występować w klauzuli GROUP BY lub być używana w funkcji agregującej

  3. Naprawianie uszkodzonej tabeli TOAST

  4. PostgreSQL 13:OGRANICZENIE… Z WIĘZAMI

  5. Dołącz do zapytania licznika w generate_series() i pobierz wartości Null jako „0”