sql >> Databáze >  >> RDS >> Oracle

Jak mohu použít GROUP_CONCAT v Rails?

Pokud vím, žádný group_concat neexistuje ekvivalent v Rails, ale můžete použít includes jak to udělat:

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

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

To vytvoří pouze 2 dotazy - vím, není to tak dobré jako jeden, ale myslím si, že je to nejlepší, co Rails dokáže udělat bez "group_concat". Druhý způsob bude něco takového:

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

Ale pokud to uděláte, musíte to změnit podle dodavatele vaší databáze.

  • MySQL :group_concat(country.name)
  • PostgreSQL :string_agg(country.name, ',')
  • Oracle :listagg(country.name, ',')


  1. Klauzule MySQL 'IN' a vrácené pořadí sady záznamů

  2. Oracle:Hledání sloupců pouze s hodnotami null

  3. Sqlcmd:Chyba:Microsoft SQL Server Native Client 10.0:Selhání komunikačního spojení

  4. Název vlastní tabulky spojení a název schématu MVC4 Entity Framework many-to-many