Мне нужно создать таблицу с накопленными значениями - PullRequest
0 голосов
/ 05 августа 2020

У меня есть эта таблица ввода:

T1

f1 f2
1  S1
1  S2
1  S3
2  S4
3  S5
3  S6

И нужно создать эту таблицу вывода:

T2

g1 g2
1  S1+S2+S3
2  S4
3  S5+S6

S # значения являются строками. g1 сгруппировано по значению f1. g2 - это конкатенация значений f2.

Могу ли я написать оператор Postgres SQL для этого?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы просто ищете string_agg()?

select f1, string_agg(f2, '+')
from t1
group by f1;

Я действительно не рекомендую string_agg(), если у вас нет специальной c необходимости в нем. Массивы более полезны, чем строки:

select f1, array_agg(f2)
from t1
group by f1;

Также обратите внимание, что порядок элементов в строке или массиве не гарантируется. Вы можете добавить order by f2, если хотите.

1 голос
/ 05 августа 2020

Используйте string_agg():

select f1, string_agg(f2, '+') f2s
from t1
group by f1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...