You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中sum case when关联查询无匹配时如何返回0

结论

完全可以通过单条SQL实现,无需编写两条独立SQL。


问题原因

你当前使用的逗号分隔的表关联是隐式内连接,仅会返回t1和t2中a字段匹配的记录,t1中不存在t2匹配项的记录会被直接过滤。


修改方案

将内连接替换为左外连接(LEFT JOIN),把表关联条件放到ON子句中即可,修改后的SQL如下:

SELECT t1.a, t1.b, t1.c, COALESCE(sum(case when t2.d > 0 then 1 else 0 end), 0) as d
FROM t1
LEFT JOIN t2 ON t1.a = t2.a
WHERE t1.e = '123'
GROUP BY t1.a, t1.b, t1.c
ORDER BY a ASC;

这里额外加COALESCE函数是为了兼容部分数据库中全NULL值sum运算返回NULL的情况,确保无匹配记录时d字段固定返回0。


结果验证

针对你给出的示例数据,上述SQL执行后会完全匹配期望结果,包含a=4的记录且d字段值为0。


内容的提问来源于stack exchange,提问作者Kukula Mula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:42:01