执行SQL分组求和遇42883错误:sum(character varying)不存在
解决PostgreSQL中SUM函数无法处理字符类型的错误
问题原因
错误提示明确:SUM()函数仅支持数值类型(如int、numeric等)的计算,但你的details.recevied_qty字段是character varying(字符串)类型,PostgreSQL找不到匹配的SUM函数实现。
解决方案
方案1:查询时显式转换字段类型
在SUM函数内将字符串字段转换为数值类型,可使用PostgreSQL的类型转换语法::numeric或标准CAST()函数:
select product.product_name, details.batch_no, details.kit_no, SUM(details.recevied_qty::numeric) Rcdqty from masters_productmaster product join inventory_grndetails details ON details.product_id_id = product.id group by product.product_name, details.batch_no, details.kit_no;
注意:原SQL中的DISTINCT可以去掉,GROUP BY已经会自动对分组后的结果去重,无需重复使用。
方案2:修改表字段类型(长期推荐)
如果recevied_qty字段的业务含义就是数量,直接修改字段类型为数值类型是更彻底的解决办法:
ALTER TABLE inventory_grndetails ALTER COLUMN recevied_qty TYPE numeric USING recevied_qty::numeric;
修改完成后,原查询语句无需转换即可正常运行。
额外注意事项
如果转换过程中出现报错,说明字段中存在无法转换为数值的无效字符串,需要先清理数据(修正或删除这些无效记录)后再执行转换或查询。
内容的提问来源于stack exchange,提问作者Ramya V
相关产品推荐
相关产品推荐

