PostgreSQL의 Select 쿼리에서 기본값을 어떻게 사용합니까?


32

행이 반환되지 않으면 사용해야하는 열에 기본값을 사용하고 싶습니다. PostgreSQL에서도 가능합니까? 어떻게하니? 아니면 이것을 해결할 수있는 다른 방법이 있습니까?

예를 들면 다음과 같습니다.

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

그리고 org_id = 3테이블에 행이 없으면 반환하고 싶습니다 0.

답변:


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

또는

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

null1 행이 있지만 post_id가 null 일 때 max (post_id)가되도록하려면

dbfiddle


13

0쿼리가 0 행을 반환 할 때 (alas 1 row) 를 표시 하려면 다음을 사용할 수 있습니다.

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

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

위의 이름 필드에 기본 이름을 사용하려는 경우 작동하지 않으며 숫자 필드를 사용하는 경우에만 작동합니다. 아래 쿼리는 모든 유형의 필드에서 작동합니다.

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

2

위 중 하나를 작동시킬 수 없습니다.

여기 내가 이것을 위해 일한 것이 있습니다 :

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

나는 우아한 해결책이 아니라 일을한다.


1
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3나를 위해 잘 작동합니다.
Jonas

2
@ mmandk9 당신은 "작동하지 않습니다"에 대해 자세히 설명 할 수 있습니다-어떤 postgres 버전이 있으며 어떤 오류 메시지가 있습니까?
Jack Douglas

-2

행을 찾을 수 없으면 기본값을 반환하십시오.

SELECT IFNULL(s_stock, 5)
  FROM stock_info 
 WHERE s_product_id = '43';

IFNULLPostgres (또는 표준 SQL)에서 유효한 구문이 아닙니다. MySQL에서 사용됩니다.
Erwin Brandstetter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.