Объединить все строковые значения, возвращаемые в - PullRequest
0 голосов
/ 07 ноября 2019

ОБНОВЛЕНИЕ / ЗАМЕЧАНИЕ ПО ОТВЕТАМ НИЖЕ pg_typeof() в моей целевой колонке было "regtype", а не "text" ...

Так что надуманный пример ниже был красной сельдью. на него правильно ответил @richyen ниже. Для тех, чьи таблицы НЕ являются текстовыми, необходимо преобразовать в текст, который является принятым ответом @a_horse_with_no_name ниже


Из таблицы myschema.thing:

id | fruit  | color  | owner_id
---+--------+--------+---------
1  | apple  | red    |   100
2  | banana | yellow |   100
3  | tomato | red    |   500
4  | grape  | purple |   200

Япытаюсь получить результат:

colors
------------------
red,yellow,purple

На основе этой страницы: https://www.postgresql.org/docs/11/functions-string.html

Я пробовал это:

select concat_ws(',', distinct(color)) as colors 
from myschema.thing

Но это не работает,Куда я иду не так? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Я думаю, вы должны использовать string_agg(), с предложением distinct:

postgres=# create table thing (id int, color text);
CREATE TABLE
postgres=# insert into thing values (1, 'red'),(2,'yellow'),(3,'red'),(4,'purple');
INSERT 0 4
postgres=# select * from thing;
 id |  color  
----+--------
  1 | red
  2 | yellow
  3 | red
  4 | purple
(4 rows)

postgres=# select string_agg(distinct color, ',') as colors from myschema.thing;
      colors       
-------------------
 purple,red,yellow
(1 row)

0 голосов
/ 07 ноября 2019

Пользователь string_agg()

select string_agg(distinct color::text, ',') as colors
from thing

Онлайн пример: https://rextester.com/GLFXG32756

...