如何在rails中的几列上执行求和和平均值

时间:2012-11-08 07:51:50

标签: mysql ruby-on-rails ruby-on-rails-3 activerecord

foo,foo_bar表示为ActiveModel类

create table foo (id, captured_date)
create table foo_bars (id, foo_id, val1, val2)

insert into foo (1, '2012-11-01')
insert into foo (2, '2012-11-02')

insert into foo_bars (1, 1, 1, 1)
insert into foo_bars (1, 1, 2, 2)
insert into foo_bars (1, 2, 3, 3)
insert into foo_bars (1, 2, 4, 4)

我希望在表格中显示以下内容(日期,总和(val1),平均值(val2))

2012-11-01 3 1.5
2012-11-02 7 3.5
_________________
           10 2.5
_________________

以上是日期的总和(val1),avg(val2)

在视图中使用AR查询实现此目的的最简单方法是什么。我的视图代码应该如何以及我应该使用哪些查询。

2 个答案:

答案 0 :(得分:2)

使用

select("date, SUM(val1) as sum_val1").group("date").pluck(:date, :sum_val1)

您将只获得一系列总和。您可以根据需要添加字段。 另一个人提到的解决方案并不是那么好,因为它在Ruby中的总和不在SQL中。 要显示它真的很简单,它只是一个数组!显示<%= result.inspect%>从那里开始。

答案 1 :(得分:0)

试试这个

总和

FooBar.sum(:val1)

或者如果你想传递条件

FooBar.where("foo_id = ? ", foo_id).sum(:val1)

或者如果view中有对象,则可以执行

例如

@foobars.sum(:val1)

for avarage

FooBar.average(:val1)