MySQL 5.7.12中使用JSON_EXTRACT求和返回0的问题求助
JSON字段中value值求和返回0的解决方法
你的问题出在直接对JSON路径返回的数组字符串求和,PostgreSQL无法识别这个字符串为有效数值,所以sum结果为0。
你的JSON字段结构:
{"damage_budget": [{"id": 1, "name": "test-one", "value": 131, "quantity": 1}, {"id": 10, "name": "test-two", "value": 460, "quantity": 1}]}
错误的查询语句:
select id, sum(column ->>'$.damage_budget[*].value') from table
正确的解决方式
需要先把JSON数组展开为单独的行,再提取每个元素的value并转成数值类型后求和:
select id, sum((elem->>'value')::numeric) from your_table, jsonb_array_elements(your_json_column::jsonb->'damage_budget') as elem group by id;
原因说明
->>'$.damage_budget[*].value'返回的是一个包含多个value的字符串数组(比如["131","460"]),sum函数无法将这个字符串解析为可累加的数值,因此返回0。而通过jsonb_array_elements展开数组后,每个元素的value被单独提取并转为数值,sum就能正确计算总和(131+460=591)。
内容的提问来源于stack exchange,提问作者Luis Felipe de Almeida Caiaffa
相关产品推荐
相关产品推荐

