Построение строки на основе столбцов из GROUP

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

user 1    A
user 1    B
user 2    H
user 2    G
user 2    A

и мне нужен результат, как:

user 1   AB
user 2  HGA

Есть ли способ получить такой результат?

2 ответа

Решение

Итак, здесь мы создаем некоторые тестовые данные

CREATE TABLE foo AS
SELECT * FROM (
    VALUES (1,'A'),(1,'B'),(2,'H'),(2,'G'),(2,'A')
) AS f(id,col);

Это должно работать,

SELECT id, array_to_string(array_agg(col), '')
FROM table
GROUP BY id;

Вот что мы делаем,

  1. GROUP BY id.
  2. Создайте PostgreSQL text[] (текстовый массив) этого столбца с array_agg
  3. Преобразуйте массив обратно в текст, присоединившись к пустой строке '' с array_to_string,

Вы также можете использовать string_agg,

SELECT id, string_agg(col, '')
FROM foo
GROUP BY id;

Лучшее решение использует str_sum совокупная функция

select 
user,
str_sum(column_name,'')
from table_name
group by user;
Другие вопросы по тегам