我有一个属于用户的作业模型,以及用户has_many作业。我想创建一个AR查询,计算每个用户的工作日总数,然后按降序排序。
到目前为止我有这个,但是给了我一个错误:(列" Job.id"必须出现在GROUP BY子句中或用在聚合函数中)
@work_days = Job.group(:user).order('SUM(total_days)')
我似乎无法使用.order方法工作 - 我有什么遗漏的东西吗?提前谢谢!
答案 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)
我不知道这在你的情况下是否真的有用,但在这个问题上花了很多时间,我想我会分享对我有用的东西。