2017-04-01 45 views
1

我正在构建一个求职者追踪他们对使用Rails感兴趣的工作的系统。我想根据用户对公司感兴趣的级别对公司进行排名,这取决于公司发布的每个职位中用户声明的“兴趣水平”的平均值。因此,例如,沃尔玛可能会发布3份工作,并且用户将提交他们对每项工作的兴趣水平,并且我们通过对这3个兴趣水平进行平均来计算沃尔玛的整体兴趣。将有几个公司有几个工作。ActiveRecord:基于协会列平均值的订单表

我的数据库有2个表:公司和工作,公司有很多工作,有一个公司有一个工作。一份工作还有一个'level_of_interest'属性,应该用来计算用户对公司的总体兴趣。

有没有办法使用ActiveRecord方法来做到这一点?我目前的解决办法是:

Job.group('company_id').average(:level_of_interest) 

,然后使用Ruby来公司拉出来的结果散列的,但我觉得可能有办法用ActiveRecord做纯粹。

DB是PG,fwiw。

回答

2

像这样的东西应该工作:

Company.select('companies.id, avg(jobs.level_of_interest)') 
     .joins(:jobs) 
     .group('companies.id') 
     .order('avg(jobs.level_of_interest) desc') 
+0

我得到的是逻辑,但它不工作,我的SQL知识是没有强大到足以解决问题。这是错误: 'PG :: GroupingError:错误:列“jobs.company_id”必须出现在GROUP BY子句中或用于聚合函数中 LINE 1:SELECT jobs.company_id,avg(jobs.level_of_interest)FROM “co ...' – samlandfried

+0

@Landfried:我编辑了上面的例子 - 看看它是否适合你:-) – gwcodes

+0

就是这样!谢谢。 – samlandfried