Запросите разделение, затем посчитайте поле значений, разделенных запятыми, в postgresql - PullRequest
0 голосов
/ 08 июня 2018

У меня есть таблица в postgresql, которая начинается так:

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

Я пытаюсь написать запрос и / или представление, которое будет разделять каждый изpart_ids в запятой, подсчитайте сумму total_inventory вместе для каждого part_id, а затем включите все part_ids в один столбец, например так:

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

Я пытался использовать unnest (string_to_array) встолбец part_ids для получения конечного результата - но вам не повезло.

У кого-нибудь есть идеи?Спасибо за помощь!

PS это мой первый вопрос - любые рекомендации / изменения, пожалуйста, дайте мне знать

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Попробуйте это:

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.

0 голосов
/ 08 июня 2018

Примерно так должно работать

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...