PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Preserve a ordem de distinct dentro de string_agg


Como você descobriu, você não pode combinar DISTINCT e ORDER BY se você não ordenar pela expressão distinta primeiro:

  • nem em agregados:

  • nem em SELECT:

No entanto, poderia usar algo como
array_to_string(arry_uniq_stable(array_agg(nome ORDER BY tid DESC)), ', ') 

com a ajuda de uma função arry_uniq_stable que remove duplicatas em uma matriz sem alterar sua ordem, como dei um exemplo em https:// stackoverflow.com/a/42399297/5805552

Por favor, tome cuidado para usar um ORDER BY expressão que realmente lhe dá um resultado determinístico. Com o exemplo que você deu, tid sozinho não seria suficiente, pois existem valores duplicados (8) com diferentes nome .