Подтвердить что ты не робот

Как удалить дубликаты, которые генерируются функцией array_agg postgres

Кто-нибудь знает, как переписать следующий SQL-запрос для генерации результатов, который будет содержать только одно вхождение имени? (результаты сгруппированы пользователем).

Запрос

SELECT array_to_string(array_agg(CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

Исполняемый запрос доступен на sqlfiddle.com. Нажмите кнопку "Запустить SQL", и вы получите результат, содержащий дважды Frantisek Smith

4b9b3361

Ответ 1

Вы можете использовать ключевое слово distinct внутри array_agg:

SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

SQLFiddle с этим примером