当前位置: 首页 > 知识库问答 >
问题:

如何执行单个sql查询来汇总活动记录中分组结果中的列?

邹海超
2023-03-14

我有两个模型- Parent和< code>Params,其中< code>Parent有_many params

目前,我的方法看起来像(不是在父类下):

def total_sum
  params.select(
    'params.*, (
      SUM(mono_volume_annular) + 
      SUM(day_volume_annular) + 
      SUM(night_volume_annular) + 
      SUM(exclusive_volume_annular)
    ) AS summed_volume_annular'
  ).group('params.id').sum(&:summed_volume_annular)
end

如何改进这个SQL查询来去掉< code >。总和(

如果我尝试在不将:summed_volume_annular转换为proc的情况下对其进行总结,我会得到以下错误:ActiveRecord::Statement无效:PG::未定义列:错误:列“summed_volume_annular”不存在

有趣的提示-如果我尝试保存此查询的结果

params.select('(
    SUM(mono_volume_annular) + 
    SUM(day_volume_annular) + 
    SUM(night_volume_annular) + 
    SUM(exclusive_volume_annular)
  ) AS summed_volume_annular'
)

我会得到这个对象<code>[#

奇怪的是,<code>summed_volume_annular</code>不存在。。。

共有1个答案

梁楷
2023-03-14

我会这样做:

def total_sum
  columns_to_sum = %w(mono_volume_annular day_volume_annular night_volume_annular
                      exclusive_volume_annular)
  sum = columns_to_sum.map{ |col| "COALESCE(#{col}, 0)" }.join(' + ')
  Params.sum(sum)
end
 类似资料:
  • 问题内容: 我需要编写一个查询,该查询从表中返回汇总和非汇总数据。 下面的示例应有助于阐明我要执行的操作。我有以下(简化)表: 为了便于讨论,假设每个学生都属于一个课程组。我想编写一个查询,该查询将返回如下结果集: student.name,student.weight,weight_apgaw,weight_apgh 在哪里: weight_apgaw: 是单个学生的体重,表示为他/她所属课程组

  • 问题:是否可以构建一个类方法作用域,它可以基于表中数组中的值查询对象?如果是,我怎么做? 更新:一些进展 我知道了如何使用'select'方法创建一个数组,其中包含我想要的所有对象。但是我仍然需要将结果作为活动记录对象返回,所以我创建了一个类方法范围。

  • 我在Rails3中的MongoDB数据库中有一个名为“Stat”的表。 在该表中,有一个名为“服务”的数组字段。 我尝试了各种各样的东西,并广泛地搜索了它,找到了一些线索,但似乎没有任何工作。我有四条记录应该与此查询匹配,但上面返回的是一个零集。 我想做的事情在Rails3/mongo中可能吗?

  • 问题内容: 如果我有一个工作表,例如: 我想要一个查询,该查询将按日期对它们进行分组,并计算该日期的每个状态和总状态的发生率。 这给了我 我现在想将其压缩为每个唯一日期的一行,并为每个日期安排某种多列布局。一个约束是5个可能的单词中的任何一个,但每个日期可能没有每个状态之一。另外,我希望每天总计所有状态。因此,所需的结果将如下所示: 列可以通过类似的方式动态构建 对于不包含任何此类状态的日期,结果

  • 问题内容: 我正在使用northwind数据库通过创建一些或多或少复杂的查询来刷新我的SQL技能。不幸的是,我找不到最后一个用例的解决方案:“获得1997年每个类别的五个最大订单的总和。” 涉及的表是: 我尝试了以下查询 好吧……原来,子查询在聚合函数中是不允许的。我已经阅读了有关此问题的其他文章,但是找不到针对我的特定用例的解决方案。希望你能帮我… 问题答案: 聚合函数中通常不允许使用子查询。相

  • 问题内容: 查看数据库时,对所有表(包括它们的行数)进行概述非常有用: information_schema数据库中的MySQL TABLES表提供了一个table_rows字段: 但是table_rows仅对某些数据库引擎有效,而对INNODB则为NULL或不准确。 因此,有必要组成一个对每个表执行显式SELECT Count(*)…的方法。 在关于stackoverflow的这个问题的许多重复