我正在尝试对特定类别中的分数进行平均。我有一张表,其中包含导演、电影、流派、收视率和分数的列表。当用户点击一部电影时,我希望他们能够看到该类型所有其他电影的平均得分。
我认为我必须结合条件使用平均方法。也就是说,我无法在网上找到任何关于这个特定主题的有用文档。如果有人可以向我指出指南或文章的方向,该指南或文章解释了如何计算带有条件的平均值并将它们显示在视图中,我将不胜感激!
我正在尝试对特定类别中的分数进行平均。我有一张表,其中包含导演、电影、流派、收视率和分数的列表。当用户点击一部电影时,我希望他们能够看到该类型所有其他电影的平均得分。
我认为我必须结合条件使用平均方法。也就是说,我无法在网上找到任何关于这个特定主题的有用文档。如果有人可以向我指出指南或文章的方向,该指南或文章解释了如何计算带有条件的平均值并将它们显示在视图中,我将不胜感激!
与其他计算一起,ActiveRecord 提供了一种称为average的方法。您可以通过实现以下内容来使用它:
class Movie
def self.average_by_genre(genre)
average(:rating).where(:genre => genre)
end
end
或者,您也可以将其实现为 Movie 模型的实例方法。
class Movie
def average_rating
self.class.average(:rating).where(:genre => self.genre)
end
end
这将让您直接从您的视图中调用该方法。
<article>
<header>
<h1><%= @movie.title %></h1>
</header>
<p>
<span>Average rating for genre <%= @movie.genre %>:</span>
<%= @movie.average_rating %>
</p>
</article>
一些原始 SQL 怎么样?
SELECT AVG(score) FROM movies WHERE category_id = 42
或在导轨中:
Movie.where(category_id: 42).average("score")
在此处阅读更多信息:http: //guides.rubyonrails.org/active_record_querying.html#average
您如何将SQL
原始查询移至database view
:
# movies_view
SELECT m.id, AVG(m.score) avg_score, c.category_id
FROM movies m
JOIN category c
ON m.category_id
所以你需要从MovieView
MovieView.find(:movie_id).avg_score