Mysql
 sql >> Datenbank >  >> RDS >> Mysql

sqlalchemy func.group_concat und zufällige Reihenfolge der Daten

SQL-Ergebnisse sind (mehrere) Sätze und haben als solche keine Reihenfolge, es sei denn, Sie definieren explizit eine. Dies gilt für Gruppenzeilen, die von GROUP BY erzeugt werden auch; Es gibt keine Reihenfolge innerhalb der Gruppen, und so erhalten Aggregate Werte in beliebiger Reihenfolge, die die aktuelle Abfrage je nach Plan, physischem Layout, Terminierung usw. gerade ergibt. Die Lösung besteht darin, explizit zu definieren bestellen :

func.group_concat(t.name.op("ORDER BY")(t.name))

Dies verwendet eine generische Operatorfunktion um die erforderliche SQL-Syntax zu erzeugen. SQLAlchemy stellt den aggregate_order_by helper für die gleiche Syntax, wird aber nur für den Postgresql-Dialekt bereitgestellt.