Сводные значения в столбцах ТОЛЬКО есть разница - PullRequest
0 голосов
/ 03 октября 2019

Если значения одного столбца совпадают, я хочу:

  1. агрегировать данные в других столбцах, где между двумя значениями есть различия
  2. Если значения являютсято же самое значение принимает

Пример данных

Name  Surname Age
Ryan  Smith   28
Ryan  Smith   29
Sean  Johnson 37

Желаемый результат:

Name  Surname Age
Ryan  Smith   28, 29
Sean  Johnson 37

Имя ryan появляется дважды, поэтому вы хотите объединить данныедля других полей фамилия и возраст ТОЛЬКО в тех случаях, когда данные отличаются для двух строк.

Фамилия Смит в обеих строках, поэтому нет необходимости агрегировать, просто хотите заполнить Смит в одной строке.

Возраст различен, поэтому хочу объединить возраст для двух строк в одну строку

Sean Johnson Запись уникальна для всех столбцов, поэтому нет необходимости собирать или изменять что-либо

Я пыталсяstring_agg, но это дает результат:

Name  Surname          Age
Ryan  Smith, Smith     28,29
Sean  Johnson           37

Агрегирует все поля независимо от того, отличаются ли данные между двумя строками или нет.

1 Ответ

0 голосов
/ 03 октября 2019

Вы можете использовать:

select name, string_agg(distinct surname, ',') as surname, string_agg(age, ',')
from t
group by name;

Это предполагает, что все name уникальны - что кажется сильным допущением для большинства наборов данных.

...