¿Cómo puedo usar un valor predeterminado en una consulta Seleccionar en PostgreSQL?

32

Me gustaría usar un valor predeterminado para una columna que debería usarse si no se devuelve ninguna fila. ¿Es eso posible en PostgreSQL? ¿Cómo puedo hacerlo? ¿O hay alguna otra forma de resolver esto?

Por ejemplo, algo como esto:

SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3

Y si no hay filas con org_id = 3en la tabla, quiero volver 0.

Jonas
fuente

Respuestas:

42
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3

o

SELECT case count(*) when 0 then 0 else MAX(post_id) end AS max_id
FROM my_table 
WHERE org_id = 3;

si desea que max (post_id) sea nullcuando hay 1 fila pero post_id es nulo

dbfiddle

Jack Douglas
fuente
13

Si desea mostrar 0(por desgracia, 1 fila) cuando su consulta devuelve 0 filas, puede usar:

SELECT COALESCE( 
        ( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
               , 0) AS max_id
ypercubeᵀᴹ
fuente
7
SELECT 
  coalesce(MAX(post_id),0) AS max_id 
FROM 
  my_table 
WHERE 
  org_id = 3 

Lo anterior no funciona si desea usar el nombre predeterminado para el campo de nombre y solo funciona si usa el campo de número. La consulta a continuación funciona para todo tipo de campos.

SELECT 
  COALESCE(
   (SELECT column_name FROM my_table WHERE id = -1), 
   'default_value'
  ) AS column_name;
vistoimurugan
fuente
2

No puedo hacer que ninguno de los anteriores funcione.

Esto es lo que encontré que funciona para esto:

SELECT COALESCE(A.max_id, B.dflt) FROM (
SELECT MAX(post_id) AS max_id FROM my_table WHERE org_id = 3) A
       RIGHT OUTER JOIN (SELECT 0 AS dflt) B
       ON 1 = 1

No me doy cuenta de que es una solución elegante, pero hace el trabajo.

mmandk9
fuente
1
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3funciona bien para mi
Jonas
2
@ mmandk9, ¿puede explicar "no funciona": en qué versión de postgres está y qué mensaje de error (si corresponde) recibe?
Jack Douglas
-2

Simplemente devuelva el valor predeterminado si no se encuentran filas:

SELECT IFNULL(s_stock, 5)
  FROM stock_info 
 WHERE s_product_id = '43';
namrata
fuente
IFNULLno es una sintaxis válida en Postgres (o SQL estándar). Se usa en MySQL.
Erwin Brandstetter