【问题标题】:rails, activerecord sum then orderrails, activerecord 总和然后排序
【发布时间】:2015-01-04 23:26:37
【问题描述】:

我有一个属于_to User 的 Job 模型,并且 User 有_many 个工作。我想创建一个 AR 查询来计算每个用户的总工作日数,然后按降序排序。

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

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

我似乎无法让 .order 方法工作 - 有什么我遗漏的吗?提前致谢!

【问题讨论】:

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

标签: ruby-on-rails ruby activerecord associations


【解决方案1】:

您可以编写查询:-

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

【讨论】:

    【解决方案2】:

    与之前略有不同

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

    【讨论】:

      【解决方案3】:

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

      即类似:

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

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

      【讨论】:

        猜你喜欢
        • 2016-05-10
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多