Если значения одного столбца совпадают, я хочу: 1. Агрегировать данные в других столбцах ТОЛЬКО там, где между двумя значениями есть различия. 2. Если значения одинаковы, принять значение
* 1002. * Пример данных
Name MiddleName Surname Age
Ryan David Smith 28
Ryan David Smith 29
Sean John Johnson 37
Sean John Johnson 38
Желаемый результат:
Name MiddleName Surname Age
Ryan David Smith 28, 29
Sean John Johnson 37, 38
Имя ryan появляется дважды, поэтому необходимо агрегировать данные для других полей фамилия и возраст ТОЛЬКО там, где данные отличаются длядве строки.
Фамилия Смит в обеих строках, поэтому не нужно агрегировать, просто хотите заполнить как Смит в одном ряду.
Возраст отличается, поэтому хотите агрегировать возраст для двух строкв одну строку
запись Шона Джонсона, я хочу объединить возрасты, поскольку они различны, но не отчество, так как это одинаково для обеих записей
select name, string_agg(distinct middlename, ','), string_agg(distinct surname, ',') as surname, string_agg(age, ',')
from t
group by name;
результат, который не является чемжелательно:
Name MiddleName Surname Age
Ryan David Smith 28, 29
Sean John, John Johnson 37, 38