#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