【问题标题】:Query to separate, then count a field of comma separated values in postgresql查询分隔,然后在 postgresql 中计算逗号分隔值的字段
【发布时间】:2018-06-08 05:26:53
【问题描述】:

我在 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 的总和 total_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) 来获得最终结果 - 但运气不佳。

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

附:这是我的第一个问题 - 任何建议/修改请告诉我

【问题讨论】:

  • 你不应该首先存储逗号分隔的值

标签: sql postgresql


【解决方案1】:

这样的东西应该可以工作

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

【讨论】:

    【解决方案2】:

    试试这个:

    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 相加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多