【问题标题】:Sort by SQL Count Used in WHERE Clause in ActiveRecord Scope按 ActiveRecord 范围内 WHERE 子句中使用的 SQL 计数排序
【发布时间】:2015-06-08 20:05:21
【问题描述】:

我正在尝试获取在传递的范围声明“where”子句期间使用的计算列,以便它可以在返回的集合中使用。我已经尝试了很多不同的方法,但都没有奏效。最终,我想要完成的是按该计数对返回的集合进行排序。到目前为止,这是我的范围:

scope :used_in_past, ->(days_ago) {
    where('(SELECT count(*) as total_tasks FROM grouptask WHERE creatorstudentid = sid AND creationdate > ?) > 0', Date.today-days_ago)
}

我想“ORDER BY”total_tasks,并希望将其传递给视图。不过,每当我尝试使用该命名列时,它只会说它不存在。

【问题讨论】:

    标签: sql ruby-on-rails postgresql activerecord


    【解决方案1】:

    也许在 SQL 语句中你可以这样做,使用别名或函数

    SELECT COUNT(sid) AS total_tasks 
    FROM grouptask
    WHERE creatorstudentid = sid AND creationdate>0
    GROUP BY sid
    ORDER BY COUNT(sid);
    

    如果您使用聚合函数,我没有在您的声明中看到 GROUP BY 部分也许您需要

    希望这个回答对你有帮助

    问候

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多