Как удалить дубликаты, которые генерируются функцией 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
Ответы
Ответ 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 с этим примером