it-swarm-eu.dev

Jak mohu použít výchozí hodnotu ve výběrovém dotazu v PostgreSQL?

Chci použít výchozí hodnotu pro sloupec, který by měl být použit, pokud nebudou vráceny žádné řádky. Je to možné v PostgreSQL? Jak to mohu udělat? Nebo existuje nějaký jiný způsob, jak to vyřešit?

Např. něco takového:

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

A pokud neexistují žádné řádky s org_id = 3 v tabulce se chci vrátit 0.

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

nebo

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

pokud chcete, aby maximum (post_id) bylo null, když je 1 řádek, ale post_id je null

dbfiddle

Pokud chcete zobrazit 0 (bohužel 1 řádek), když dotaz vrátí 0 řádků, můžete použít:

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

Výše uvedené nefungují, pokud chcete použít výchozí název pro jméno pole a funguje to pouze, pokud používáte číslo pole. Níže uvedený dotaz funguje pro všechny typy polí.

SELECT 
  COALESCE(
   (SELECT column_name FROM my_table WHERE id = -1), 
   'default_value'
  ) AS column_name;
7
seenimurugan

Nemohu dostat ani jeden z výše uvedených do práce.

Zde je to, co jsem našel pro to pracovat:

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

Uvědomuji si, že nejde o elegantní řešení, ale o práci.

3
mmandk9