如何将agtype(顶点/边)转为普通Map?边val属性求和方案咨询
解决AGType edges列表val属性求和问题
针对AGType类型的edges数组无法用常规UNWIND求和的问题,给你两个实用方案:
方案一:使用AGGraph专属的ag_unnest函数
这是最适配AGType的方式,专门用来展开AGType数组,之后直接提取val属性求和即可:
SELECT sum((edge).val) AS total_val FROM ( -- 替换your_edges_column为你的edges字段名,your_table为表名 SELECT ag_unnest(your_edges_column) AS edge FROM your_table ) AS edges_unfolded;
如果是直接使用AGType数组字面量,也可以直接用:
SELECT sum((edge).val) AS total_val FROM ag_unnest('[ { "val": 5 }, { "val": 10 }, { "val": 15 } ]'::agtype) AS edge;
方案二:转换为JSONB处理
先通过ag_to_json把AGType转成JSONB格式,再用PostgreSQL原生的jsonb_array_elements展开,最后转换类型求和:
SELECT sum((edge->>'val')::numeric) AS total_val FROM ( SELECT jsonb_array_elements(ag_to_json(your_edges_column)::jsonb) AS edge FROM your_table ) AS edges_json;
内容的提问来源于stack exchange,提问作者Mohayu Din
相关产品推荐
相关产品推荐

