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

例如像这样的东西:

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


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

#1 楼

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)为1行但post_id为null时null

dbfiddle

#2 楼

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

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


评论


如何针对多于一列的列进行此操作?

–龙
20 Mar 24 '20 at 10:40

#3 楼

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;


#4 楼

我不能使以上任何一种正常工作。

这是我发现要解决的问题:解决方案,但能胜任。

评论


SELECT Coalesce(MAX(post_id),0)AS max_id从my_table那里org_id = 3对我来说很好。

–乔纳斯(Jonas)
2011年10月21日在18:27

@ mmandk9您可以详细说明“无效”吗?-您使用的是哪种版本的Postgres,以及收到了什么错误消息(如果有)?

–杰克·道格拉斯(Jack Douglas)
2011年10月21日19:37

#5 楼

如果未找到任何行,只需返回默认值:

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


评论


IFNULL在Postgres(或标准SQL)中不是有效的语法。在MySQL中使用。

–欧文·布兰德斯特(Erwin Brandstetter)
13年4月20日在13:00

如果未找到任何行,则不会返回任何内容。

–法比安·皮克(Fabian Pijcke)
20年5月5日,19:53