it-swarm.dev

Jak mogę użyć wartości domyślnej w zapytaniu Select w PostgreSQL?

Chciałbym użyć wartości domyślnej dla kolumny, której należy użyć, jeśli nie zostaną zwrócone żadne wiersze. Czy jest to możliwe w PostgreSQL? Jak mogę to zrobić? Czy jest jakiś inny sposób na rozwiązanie tego problemu?

Na przykład. coś takiego:

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

A jeśli nie ma wierszy z org_id = 3 w tabeli, którą chcę zwrócić 0.

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

lub

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

jeśli chcesz, aby max (post_id) był null, gdy jest 1 wiersz, ale post_id jest pusty

dbfiddle

Jeśli chcesz pokazać 0 (niestety 1 wiersz), gdy zapytanie zwróci 0 wierszy, możesz użyć:

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 

Powyższe nie działa, jeśli chcesz użyć domyślnej nazwy dla pola nazwy i działa tylko, jeśli używasz pola liczbowego. Poniższe zapytanie działa dla wszystkich typów pól.

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

Nie mogę zmusić żadnego z powyższych do pracy.

Oto, co znalazłem do pracy:

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

Zdaję sobie sprawę, że nie jest to eleganckie rozwiązanie, ale spełnia swoje zadanie.

3
mmandk9