如何在 PostgreSQL 的 Select 查询中使用默认值?

Jon*_*nas 43 postgresql aggregate select default-value

如果没有返回行,我想为应该使用的列使用默认值。这在 PostgreSQL 中可能吗?我该怎么做?或者我还有其他方法可以解决这个问题吗?

例如这样的事情:

SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3
Run Code Online (Sandbox Code Playgroud)

如果org_id = 3表中没有行,我想返回0

Jac*_*las 55

SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3
Run Code Online (Sandbox Code Playgroud)

或者

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

如果您希望 max(post_id)null为 1 行但 post_id 为空

数据库小提琴


ype*_*eᵀᴹ 15

如果要0在查询返回 0 行时显示(alas 1 行),则可以使用:

SELECT COALESCE( 
        ( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
               , 0) AS max_id
Run Code Online (Sandbox Code Playgroud)


小智 7

SELECT 
  coalesce(MAX(post_id),0) AS max_id 
FROM 
  my_table 
WHERE 
  org_id = 3 
Run Code Online (Sandbox Code Playgroud)

如果您想对 name 字段使用默认名称,则上述方法不起作用,并且仅当您使用 number 字段时才有效。以下查询适用于所有类型的字段..

SELECT 
  COALESCE(
   (SELECT column_name FROM my_table WHERE id = -1), 
   'default_value'
  ) AS column_name;
Run Code Online (Sandbox Code Playgroud)