Mysql
 sql >> Base de données >  >> RDS >> Mysql

sqlalchemy func.group_concat et ordre aléatoire des données

Les résultats SQL sont des (multi) ensembles et, en tant que tels, n'ont pas d'ordre, à moins que vous n'en définissiez un explicitement. Cela s'applique aux lignes de groupe produites par GROUP BY aussi bien; il n'y a pas d'ordre dans les groupes, et donc les agrégats reçoivent des valeurs dans n'importe quel ordre dans lequel la requête actuelle en fonction du plan, de la disposition physique, de la planification, etc. se produit. La solution consiste à définir explicitement le commande :

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

Cela utilise une fonction d'opérateur générique pour produire la syntaxe SQL requise. SQLAlchemy fournit le aggregate_order_by helper pour la même syntaxe, mais il est fourni uniquement pour le dialecte Postgresql.