查询分离,然后在postgresql中计算逗号分隔值的字段

时间:2018-06-07 21:01:02

标签: sql postgresql

我在postgresql中有一个表格,如下所示:

car_id  part_ids     total_inventory
------  --------     ----------
10134   101,506,589  50
12236   201,506,101  20
78865   201,399,304  10

我正在尝试编写一个查询和/或视图来分隔逗号上的每个part_id,一起计算每个part_id的sum_inventory总和,然后将所有part_id包含在一个列中这样:

part_ids total_inventory
-------- ----------
101      70
506      70   
589      50
201      30
399      10
304      10

我尝试在part_ids列上使用unnest(string_to_array)来获得最终结果 - 但是没有太多运气。

有人有什么想法吗?谢谢你的帮助!

P.S。这是我的第一个问题 - 任何建议/编辑请告诉我

2 个答案:

答案 0 :(得分:2)

这样的事情应该有效

select p.part_id, 
       sum(t.total_inventory) as total_inventory
from parts t
  cross join lateral unnest(string_to_array(part_ids, ',')::int[]) as p(part_id)
group by p.part_id

在线示例:http://rextester.com/NVTCG56767

答案 1 :(得分:0)

试试这个:

WITH X AS 
(
    SELECT car_id, UNNEST(REGEXP_SPLIT_TO_ARRAY(part_ids, ',')) AS part_ids, total_inventory FROM parts
)
SELECT part_ids, SUM(total_inventory) AS total_inventory FROM X GROUP BY part_ids
ORDER BY total_inventory DESC;

在第一步中,我创建一个临时表来保存未连接的值。

然后我将part_ids分组并将其相关的total_inventory相加。