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

Comment puis-je utiliser GROUP_CONCAT dans Rails ?

Tant que je sais, il n'y a pas de group_concat équivalent dans Rails, mais vous pouvez utiliser includes pour faire ça :

continents = Continents
  .joins(:countries, :event_locations)
  .includes(:countries)
  .group("continents.code")

continents.each do |continent| 
  continent.countries.join(",")
end

Cela ne produira que 2 requêtes - je sais, ce n'est pas si bon qu'une seule, mais je pense que c'est le mieux que Rails puisse faire sans "group_concat". L'autre façon sera quelque chose comme ça :

Country
  .select("countries.id, GROUP_CONCAT(countries.name) as grouped_name")
  .joins(:continents, :event_locations)
  .group("continents.code")

Mais si vous faites cela, vous devez changer en fonction de votre fournisseur de base de données.

  • MySQL :group_concat(countries.name)
  • PostgreSQL :string_agg(pays.nom, ',')
  • Oracle :listagg(pays.nom, ',')