質問: drinks.id group by store_code, drinks.name); ``` 上記のSQL文を挟む理由としては、 drink_prices テーブルには同じ名前の値段だけ違う値が入っています。 drinks の name を表示するにあたって、同じ名前を2度出力することを避けるために、一度 1d が若い方を省いて取得しています。 上記のsql文で取得できたデータは以下のようなものになります。 ``` [ {"store_code"=>"a", "name"=>"ミックスジュース"}, {"store_code"=>"a", "name"=>"トマトジュース"}, {"store_code"=>"a", "name"=>"お茶"}, {"store_code"=>"a", "name"=>"麦茶"}, {"store_code"=>"b", "name"=>"ミックスジュース"}, {"store_code"=>"b", "name"=>"トマトジュース"}, {"store_code"=>"b", "name"=>"お茶"}, . . . ] ``` このようなhash値が取得できます。 これを以下のようなhash値に変換したいと考えています。 ``` [ {"store_code"=>"a", "name"=>["ミックスジュース", "トマトジュース", "お茶", "麦茶"]}, {"store_code"=>"b", "name"=>["ミックスジュース", "トマトジュース", "お茶"]}, . . . ] ``` store_codeごとにnameの値がまとめられている状態にしたいです。 tableから取得するとき、取得した後rubyで書き換える、どちらの方法でやるのがベストなのかもわからないです.... ### 補足情報(FW/ツールのバージョンなど) Rails 6.0.3.4 ruby 2.6.5 sqLite3
回答: Railsですよね? でしたら `select * from table` でなく tables = Table.all で。 で、Rubyで処理するなら `tables = Table.pluck(:store_code, :name).group_by(&:store_code).group_by(&:first).map{|k,a| [k,a.map(&:last)]}.to_h` 追記 `original.group_by{|h| h["store_code"]}.map{|k,a| [k,a.map{|h| h["name"]}]}.to_h`