たとえば、商品レビューが100件あるテーブルがあります。各レビューには「id」、「product_id」、「score」があります。さて、私がしたいのは、各製品の平均得点です...これを行うためにRailsを使用してDBにクエリを行う方法はありますか?私はそこにいるはずだと確信していますが、私はそれを理解できません。私は次のことが起こりたいと思っています:activerecordとPOSTGRESを使用して商品の平均評点を平均化する方法
Toyota Corolla 70%
Toyota Camry 78%
Toyota Avalon 80%
平均して複数のレビューに基づいていますが、上記の方法で表示されています。
UPDATE:溶液中の興味のある人のため
これはコントローラである。
@ordered_hash = Review.group('aidmodel_id').average('score')
@keys = @ordered_hash.keys
@reviews = Review.where(:aidmodel_id=>@keys).uniq_by {|x| x.aidmodel_id}
これはビューである:
<% @reviews.each do |review| %>
<%= review.aidmodel.id %>
<%= @ordered_hash[review.aidmodel_id] %>
<% end %>
@ordered_hash[review.aidmodel_id]
ラインが提供所望のIDを有する援助モデルの平均スコア。
おかげBaldrickを試してみてください。私のためにちょうど1つの問題。 Railsコンソールで実行するとエラーが表示されます:ActiveRecord :: StatementInvalid:PG :: Error:ERROR:列 "reviews.created_at"は、GROUP BY句に現れなければならないか、集約関数で使用する必要があります。これを引き起こしているのは何ですか? – Abram
私は単純にconsole(aidmodel_idは私の場合はproduct_idと同じです)で以下を実行しました:Review.group( 'aidmodel_id')。average( 'score') – Abram
なぜこのエラーがあるのか分かりません。私は自分のモデルでテストしたところ、次のSQLリクエスト 'Match.group( 'championship_id')を返しましたaverage( 'date')' => '(30.0ms)SELECT AVG(" matches "。" date ")AS average_date、championship_id AS championship_id FROM" matches "GROUP BY championship_id' – Baldrick