Один из моих любимых агрегатов postgres - это «список», приписываемый «Chris Rohlfs в idocs» в соответствии с скудными доказательствами, которые я могу найти в Интернете.Изменить postgresql "list" aggregate для удаления дубликатов
CREATE FUNCTION comma_cat (text, text)
RETURNS text AS
'SELECT CASE
WHEN $2 is null or $2 = '''' THEN $1
WHEN $1 is null or $1 = '''' THEN $2
ELSE $1 || '', '' || $2
END'
LANGUAGE sql;
CREATE AGGREGATE list (BASETYPE = text, SFUNC = comma_cat, STYPE = text, INITCOND = '');
Я нахожу, иногда, что хотел бы его устранить дубликаты. old mailing list thread предполагает, что этот подход не может выполнять сортировку, что может быть убийцей сделок для удаления дубликатов. Another post in the same thread предлагает функцию, которая делает то же самое; возможно, это более изменчиво для этой цели?
А пока я просто массирую вывод на другом языке. Но было бы здорово, если бы мы могли сделать это прямо в postgres!
Смотрите обновленный пост – Quassnoi
Переехал из редактирования: К сожалению, , Первоначальный подход Кваснуи, похоже, не помог; У меня есть тот же список результатов из нового метода, который я получаю от того, что я использовал изначально. Я действительно пытался добавить КОГДА $ 1 = $ 2 ТОГДА $ 1 изначально, хотя я не знал о SORTOP. –