首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord计算多个平均值

ActiveRecord计算多个平均值
EN

Stack Overflow用户
提问于 2011-03-01 08:58:52
回答 3查看 2.7K关注 0票数 1

我有一个分数表,每个用户都有分数和时间。我想要计算按用户分组的两个平均值。我可以成功地计算出其中的一个,但不确定如何同时计算两个。

代码语言:javascript
复制
@scores = SpellingScore.where(:user_id => users).average(:score, :group => :user)

将生成如下的sql

代码语言:javascript
复制
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的方式。

这就是我想做的..。

代码语言:javascript
复制
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

干杯,

时间

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-01 09:02:05

只需使用SQL即可。忘掉ActiveRecord的方式吧,SQL更适合于这样的东西。如果您想将逻辑保留在模型中,只需在模型中创建一个新方法

票数 0
EN

Stack Overflow用户

发布于 2011-03-01 09:32:12

谢谢你的帮助,麦卡锡。

我最终是这样做的

代码语言:javascript
复制
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链接。

票数 4
EN

Stack Overflow用户

发布于 2014-02-19 18:44:58

但是,如果没有模式,SpellingScore.group(:user).average(:score)就不能对此进行测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5149397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档