我有一个得分表,包括每个用户的得分和时间。我想计算按用户分组的两个平均值。我可以成功地计算其中一个,但不知道如何同时做两个。
@scores = SpellingScore.where(:user_id => users).average(:score, :group => :user)
将生成如下的
的sqlSELECT 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
干杯,
添
答案 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)
如果没有架构,则无法测试此