PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Върнете нула, ако не бъде намерен запис

Можете да:

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

Това се случва да работи, защото вашата заявка има обобщена функция и следователно винаги връща ред, дори ако нищо не е намерено в основната таблица.

Обикновените заявки без агрегат ще върнат без ред в такъв случай. COALESCE никога не би се обадил и не би могъл да те спаси. Докато работим с една колона, вместо това можем да обвием цялата заявка:

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

Работи и за оригиналната ви заявка:

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

Повече за COALESCE() в ръководството.
Още за агрегатните функции в ръководството.
Още алтернативи в тази по-късна публикация:

  • Как да върна стойност от функция, ако не е намерена стойност


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - Писане на динамичен sql в съхранена процедура, която връща набор от резултати

  2. ST_DWithin приема параметър като градус, а не метри, защо?

  3. Използвайте променлива, зададена от мета-команда psql вътре в блока DO

  4. Актуализирайте вашата PostgreSQL парола в Linux

  5. PostgreSQL таблична променлива