行が返されない場合に使用する必要がある列のデフォルト値を使用したいと思います。 PostgreSQLでそれは可能ですか?どうすればできますか?それとも私がこれを解決できる他の方法はありますか?
例えば。このようなもの:
SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3
そして、テーブルにorg_id = 3
の行がない場合、0
を返します。
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
にしたい場合
表示したい場合0
(alas 1 row)クエリが0行を返す場合、次を使用できます。
SELECT COALESCE(
( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
, 0) AS max_id
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;
上記のいずれも機能しません。
これが私がこれのために働くことがわかったものです:
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
エレガントな解決策ではないが、仕事はします。