例如像这样的东西:
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
#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
评论
如何针对多于一列的列进行此操作?
–龙
20 Mar 24 '20 at 10:40