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

如何让PostgreSQL查询返回空JSON字段的0值求和结果?

PostgreSQL查询:空JSON对象返回0.0求和结果

场景与问题

现有表tableA结构及数据如下:

______________________________________________________
|companyId |    detailsJson                          |
|----------| ----------------------------------------|
|12        |{"dataKeyOne":1.10, "dataKeyTwo":1.20}   |
|123       |{"dataKeyFour":2.12, "dataKeySeven":1.18}|
|134       |    {}                                   |
|342       |    {}                                   |
______________________________________________________

当前使用的查询语句:

select companyId, sum(value::float) as sum
from tableA, jsonb_each_text(detailsJson)
group by companyId;

得到的输出结果:

|companyId |    sum|
|----------|-------|
|12        |  2.30 |
|123       |  3.30 |

需要实现的效果:当detailsJson为空对象时,对应的companyId的sum值返回0.0,期望输出:

|companyId |    sum|
|----------|-------|
|12        |  2.30 |
|123       |  3.30 |
|134       |  0.0  |
|342       |  0.0  | 

解决方案

原查询用了隐式内连接(逗号分隔),当detailsJson是空对象时,jsonb_each_text()返回空结果集,导致这些行被过滤。改用LEFT JOIN LATERAL保留所有companyId行,再用COALESCE将sum的NULL值替换为0.0即可。

修改后的查询语句:

select 
    companyId, 
    COALESCE(sum(value::float), 0.0) as sum
from tableA
left join lateral jsonb_each_text(detailsJson) on true
group by companyId;

关键说明

  • LEFT JOIN LATERAL:确保即使jsonb_each_text()返回空,也会保留tableA中的每一行数据。
  • COALESCE(sum(value::float), 0.0):当sum计算结果为NULL(即没有可求和的JSON键值对)时,自动替换为0.0。

内容的提问来源于stack exchange,提问作者Ankit Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:06:49