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


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;

max(post_id)nullが1行であるがpost_idがnullである場合

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私にとってはうまくいきます。
ジョナス

2
@ mmandk9では、「機能しない」ということを詳しく説明できます。どのバージョンのpostgresを使用していて、どのエラーメッセージ(ある場合)が表示されますか?
ジャックダグラス

-2

行が見つからない場合は、デフォルト値を返します。

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

IFNULLPostgres(または標準SQL)では有効な構文ではありません。MySQLで使用されます。
アーウィンブランドステッター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.