Как группировать postgresql, когда идентификатор такой же, в новое добавленное значение

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть такая таблица:

введите описание изображения здесь

И я хотел бы поместить элемент значения в одну строку, когда user_input_id и question_id дублируется.

Результат, который я желаю, таков:

введите описание изображения здесь

Кто-нибудь может сказать мне, как его запросить?

Спасибо

Ответ №1:

Вы можете легко сделать это с помощью string_agg(value,’,’) в postgresql.

 select user_input_id,question_id,        
string_agg(value,',') as other_names
from table_name
group by  user_input_id,question_id
order by user_input_id,question_id
 

Вывод:

введите описание изображения здесь

У вас также может быть array_aggr() в postgres:

 select user_input_id,question_id,        
array_agg(value::text ) as other_names
from table_name
group by  user_input_id,question_id
order by user_input_id,question_id
 

Вывод:

введите описание изображения здесь

Комментарии:

1. Ахмаду Али нужен список, разделенный запятыми, поэтому string_agg(value, ',') он кажется более подходящим

Ответ №2:

Просто заполните временную таблицу данными этой таблицы и усеките ее. Затем используйте агрегированные функции, подобные этому:

 CREATE TEMP TABLE temp_tbl(
   columns ...
);    
insert into temp_tbl
select * from main_tbl

truncate table main_tbl

insert into main_tbl


select user_input_id,question_id, string_agg(value, ',')
from temp_tbl 
group by user_input_id,question_id