Как усреднить оценки продуктов, используя activerecord и POSTGRES - PullRequest
4 голосов
/ 18 марта 2012

Допустим, у меня есть таблица с 100 обзорами продуктов.У каждого отзыва есть «id», «product_id» и «score».Теперь, что я хочу сделать, это представить среднюю оценку для каждого продукта ... Так есть ли способ сделать запрос к БД, используя Rails для этого?Я уверен, что должно быть, но я не могу понять это.Я хотел бы, чтобы произошло следующее:

Toyota Corolla 70%
Toyota Camry 78%
Toyota Avalon 80%

.. очевидно, на основе нескольких обзоров для каждого, которые усреднены, но представлены вышеописанным способом.

ОБНОВЛЕНИЕ:

Для тех, кто заинтересован в решении

Это в контроллере:

@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] обеспечиваетУсредненная оценка модели помощи с желаемым идентификатором.

Ответы [ 2 ]

6 голосов
/ 18 марта 2012

Вы можете смешать среднее и группу , чтобы сделать что-то вроде

MyClass.group('product_id').average('score')
# => {product_id1 => average1, product_id2 => average2, ... }
1 голос
/ 18 марта 2012

Вам нужно изменить запрос как

MyClass.select('product_id').group('product_id').average('score')

. Посмотрите на вопрос .

Обновление:

Попробуйте MyClass.select('DISTINCT(product_id)').group('product_id').average('score')

Смотрите здесь Группировка в Postgres

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...