rails,activerecord sum然后命令

时间:2014-11-08 04:10:11

标签: ruby-on-rails ruby activerecord associations

我有一个属于用户的作业模型,以及用户has_many作业。我想创建一个AR查询,计算每个用户的工作日总数,然后按降序排序。

到目前为止我有这个,但是给了我一个错误:(列" Job.id"必须出现在GROUP BY子句中或用在聚合函数中)

@work_days = Job.group(:user).order('SUM(total_days)')

我似乎无法使用.order方法工作 - 我有什么遗漏的东西吗?提前谢谢!

3 个答案:

答案 0 :(得分:9)

你可以写下你的查询: -

Job.group(:user_id).select('SUM(total_days) as tot').order('tot desc')

答案 1 :(得分:5)

与之前略有不同

Job.group(:user_id).order('sum_total_days DESC').sum(:total_days)

答案 2 :(得分:0)

现有的答案对我没有用,我不得不稍微编辑group方法。如果我使用你的模型(即用户),我需要列出组方法中的每个用户属性。

即。类似的东西:

user_attrs = User.new.attributes.keys.map { |key| "users.#{key}" }.join(",")
 Job.group(user_attrs).order('sum_total_days DESC').sum(:total_days)

我不知道这在你的情况下是否真的有用,但在这个问题上花了很多时间,我想我会分享对我有用的东西。