web-dev-qa-db-ja.com

PostgreSQLの選択クエリでデフォルト値を使用するにはどうすればよいですか?

行が返されない場合に使用する必要がある列のデフォルト値を使用したいと思います。 PostgreSQLでそれは可能ですか?どうすればできますか?それとも私がこれを解決できる他の方法はありますか?

例えば。このようなもの:

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

そして、テーブルにorg_id = 3の行がない場合、0を返します。

35
Jonas
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;

1行あるがpost_idがnullのときにmax(post_id)をnullにしたい場合

dbfiddle

表示したい場合0(alas 1 row)クエリが0行を返す場合、次を使用できます。

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 

上記は、名前フィールドにデフォルト名を使用する場合には機能せず、数値フィールドを使用する場合にのみ機能します。以下のクエリは、すべてのタイプのフィールドで機能します。

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

上記のいずれも機能しません。

これが私がこれのために働くことがわかったものです:

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

エレガントな解決策ではないが、仕事はします。

3
mmandk9