PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Behalten Sie die Distinct-Reihenfolge innerhalb von string_agg bei

Wie Sie herausgefunden haben, können Sie DISTINCT nicht kombinieren und ORDER BY wenn Sie nicht zuerst nach dem eindeutigen Ausdruck ordnen:

  • weder in Aggregaten:

  • noch in SELECT:

Könnte jedoch so etwas wie

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

mit Hilfe einer Funktion arry_uniq_stable das Duplikate in einem Array entfernt, ohne seine Reihenfolge zu ändern, wie ich ein Beispiel für in https:// stackoverflow.com/a/42399297/5805552

Bitte achten Sie darauf, einen ORDER BY zu verwenden Ausdruck, der Ihnen tatsächlich ein deterministisches Ergebnis liefert. Mit dem Beispiel, das Sie gegeben haben, tid allein würde nicht ausreichen, da es doppelte Werte (8) mit unterschiedlichem nome gibt .