我想获得每家公司的统计数据。 每个月和总计可能分开吗? 另一方面,是否需要一个功能?
ResultModel
company_id , count , date
1,3,2014-01-06 06:14:03 +0000
1,3,2014-01-08 16:14:03 +0000
1,3,2014-02-06 07:05:03 +0000
1,3,2014-03-06 36:14:04 +0000
1,3,2014-03-06 26:12:05 +0000
1,3,2014-03-06 06:23:05 +0000
2,3,2014-03-06 06:23:05 +0000
Result
company_id , month , total
1 , 201401 , 2
1 , 201402 , 1
1 , 201403 , 3
答案 0 :(得分:1)
Alias Column
您可以通过使用alias
列来实现此目的,如this Railscast(06:30)中所述:
你可以这样做:
#app/models/result.rb
Class Result < ActiveRecord::Base
has_many :more_results, -> { select("#{Result.table_name}.*, #{ResultModel.table_name}.month AS new_month")}
end
这使您能够从数据库中提取关联数据,从而允许您对其执行计算。我相信这会导致n+1
查询问题,但希望能为您提供一些工作方法。
-
<强> Definition: 强>
别名是SQL的一项功能,大多数人都支持,如果不是全部的话, 关系数据库管理系统(RDBMS)。别名提供 数据库管理员以及其他数据库用户 能够减少查询和制作所需的代码量 查询通常更容易理解。另外,别名也可以 用作混淆技术来保护数据库的真实名称 字段。
您遇到的问题是,调用您的单个模型的数据无法访问您使其运行所需的所有数据。相反,你应该看看你如何通过一个关联来调用其他模型的数据
<强>计数强>
我不确定你想要&#34;计算月数&#34;是什么意思,但我知道你可以包含一个COUNT
方法这样:
#app/models/result.rb
Class Result < ActiveRecord::Base
has_many :more_results, -> { select("#{Result.table_name}.*, count(#{ResultModel.table_name}.month) AS total")}
end