ActiveRecord计算多个平均值

时间:2011-03-01 00:58:52

标签: ruby-on-rails activerecord average

我有一个得分表,包括每个用户的得分和时间。我想计算按用户分组的两个平均值。我可以成功地计算其中一个,但不知道如何同时做两个。

@scores = SpellingScore.where(:user_id => users).average(:score, :group => :user)

将生成如下的

的sql
SELECT AVG(`spelling_scores`.`score`) AS average_score, user_id AS user_id 
FROM `spelling_scores` 
WHERE (`spelling_scores`.`user_id` IN (78767, 78772, 78775)) GROUP BY user_id

我知道如何在SQL中执行此操作但无法使用ActiveRecord方式。

这就是我想要做的......

SELECT AVG(`spelling_scores`.`score`) AS average_score, AVG(`spelling_scores`.`time`) AS average_time, user_id AS user_id 
FROM `spelling_scores` 
WHERE (`spelling_scores`.`user_id` IN (78767, 78772, 78775)) GROUP BY user_id

干杯,

3 个答案:

答案 0 :(得分:4)

感谢您的帮助Macarthy。

我最终这样做了

SpellingScore.select("AVG(`spelling_scores`.`score`) AS average_score, 
AVG(`spelling_scores`.`time`) AS average_time, COUNT(*) AS question_count, user_id AS 
user_id").where(:user_id => users).group(:user_id).includes(:user).order('users.last')

至少我保留了一些ActiveRecord链接。

答案 1 :(得分:0)

只需使用SQL。忘记ActiveRecord方式,SQL更适合这样的事情。如果您想在模型中保留逻辑,只需在模型中创建一个新方法

答案 2 :(得分:0)

这不会有效SpellingScore.group(:user).average(:score) 如果没有架构,则无法测试此