PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Conserva l'ordine dei distinti all'interno di string_agg

Come hai scoperto, non puoi combinare DISTINCT e ORDER BY se prima non ordini in base all'espressione distinta:

  • né in aggregati:

  • né in SELECT:

Tuttavia potrebbe usare qualcosa come

array_to_string(arry_uniq_stable(array_agg(nome ORDER BY tid DESC)), ', ') 

con l'aiuto di una funzione arry_uniq_stable che rimuove i duplicati in un array senza alterarne l'ordine come ho fornito un esempio in https:// stackoverflow.com/a/42399297/5805552

Si prega di fare attenzione a utilizzare un ORDER BY espressione che in realtà ti dà un risultato deterministico. Con l'esempio che hai fornito, tid da solo non sarebbe sufficiente, in quanto esistono valori duplicati (8) con nome diversi .