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

PostgreSQL列求和报错:function sum(text) does not exist 技术问询

问题解决方案

错误原因

你用->>运算符从JSON中提取的numberOfHouseholds是文本类型,而sum()函数仅支持对数值类型(如integer、numeric)进行计算,因此报错提示找不到匹配的sum(text)函数。

修复后的SQL代码

方法1:提取字段时直接转换类型

在提取字段后添加类型转换,若字段是整数则转成integer:

SELECT sum(A.number_Of_Households)
FROM (SELECT 
  
  (json_data->'benefits' ->> 'numberOfHouseholds')::integer as number_Of_Households
  
FROM ccbc_public.application a 
    inner join ccbc_public.application_form_data afd on a.id = afd.application_id
    inner join ccbc_public.form_data f on f.id = afd.form_data_id
    where ccbc_public.application_status(a) <> 'draft') As A

如果字段包含小数,可转成numeric类型:

(json_data->'benefits' ->> 'numberOfHouseholds')::numeric as number_Of_Households

方法2:在sum函数内部转换类型

也可以直接在sum()中对字段做类型转换:

SELECT sum((A.number_Of_Households)::integer)
FROM (SELECT 
  
  json_data->'benefits' ->> 'numberOfHouseholds' as number_Of_Households
  
FROM ccbc_public.application a 
    inner join ccbc_public.application_form_data afd on a.id = afd.application_id
    inner join ccbc_public.form_data f on f.id = afd.form_data_id
    where ccbc_public.application_status(a) <> 'draft') As A

额外处理建议

如果JSON中的numberOfHouseholds可能存在非数值内容(如null、非数字字符串),可以用条件语句避免转换失败:

SELECT sum(CASE WHEN A.number_Of_Households ~ '^[0-9]+$' THEN A.number_Of_Households::integer ELSE 0 END)
FROM (SELECT 
  
  json_data->'benefits' ->> 'numberOfHouseholds' as number_Of_Households
  
FROM ccbc_public.application a 
    inner join ccbc_public.application_form_data afd on a.id = afd.application_id
    inner join ccbc_public.form_data f on f.id = afd.form_data_id
    where ccbc_public.application_status(a) <> 'draft') As A

内容的提问来源于stack exchange,提问作者Ali Fathalian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:05:40