sql >> データベース >  >> RDS >> Oracle

RailsでGROUP_CONCATを使用するにはどうすればよいですか?

    私の知る限り、group_concatはありません。 Railsでも同等ですが、includesを使用できます それを行うには:

    continents = Continents
      .joins(:countries, :event_locations)
      .includes(:countries)
      .group("continents.code")
    
    continents.each do |continent| 
      continent.countries.join(",")
    end
    

    これにより生成されるクエリは2つだけです。1つほど良くはありませんが、Railsが「group_concat」なしで実行できるよりも優れていると思います。他の方法は次のようになります:

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

    ただし、そうする場合は、データベースベンダーに応じて変更する必要があります。

    • MySQL :group_concat(countries.name)
    • PostgreSQL :string_agg(countries.name、'、')
    • オラクル :listagg(countries.name、'、')


    1. 各単語の最初の文字を大文字にする組み込み関数

    2. InnoDBまたは代替を使用したグループごとのMySQLAUTO_INCREMENT

    3. 古いmysqlとPDOの混合

    4. GrantLoggingトリガーを使用したORA-6502