加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 绑定的activerecords-queries使用聚合函数(s

发布时间:2020-12-17 04:00:57 所属栏目:百科 来源:网络整理
导读:鉴于此伪查询: Model.sum(:column,:condition = ['id = ?',id],order = "date DESC",:limit = X) 在这里,我们遇到的问题是,获得的总和不受值X的限制(它取总和列上的所有值而不是X(第一)条目的总和). 似乎在计算聚合函数和之后采用了限制. 我怎样才能得到仅
鉴于此伪查询:

Model.sum(:column,:condition => ['id = ?',id],order => "date DESC",:limit => X)

在这里,我们遇到的问题是,获得的总和不受值X的限制(它取总和列上的所有值而不是X(第一)条目的总和).

似乎在计算聚合函数和之后采用了限制.

我怎样才能得到仅由第一次X条目限制的金额?

解决方法

MurifoX的建议不起作用,因为LIMIT仅适用于最终结果集,后者只有一行(总和).见 this thread.

解决这个问题的最简单方法是不在数据库中进行计数:

Model.where(:id => id).order('date DESC').limit(3).pluck(:column).compact.sum

这会将列的值加载到Ruby中并将其汇总.现在,如果记录集非常庞大,那么效率会显着降低,因为所有这些值都会加载到应用程序的内存中.

编辑:添加.compact – 这将在对数组进行求和之前从数组中删除nils(这会导致错误).

在SQL中执行此操作的建议方法是使用子查询,如下所示:

SELECT SUM(subquery.column) FROM (
  SELECT * FROM models WHERE id = 5 LIMIT 3
) AS subquery;

将其转换为ActiveRecord查询并不是一种简单或直接的方法,因为那些人??希望从特定模型的表中进行选择.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读