sql - ActiveRecord:基于关联列的平均值对表进行排序

标签 sql ruby-on-rails ruby activerecord

我正在为求职者构建一个系统,以跟踪他们对使用 Rails 感兴趣的工作。我想根据用户对公司的兴趣程度对公司进行排名,该兴趣程度是通过平均用户声明的对公司发布的每项职位的“兴趣程度”来确定的。例如,沃尔玛可能会发布 3 个职位,用户将提交对每个职位的兴趣级别,然后我们通过对这 3 个兴趣级别进行平均来计算对沃尔玛的总体兴趣。将会有多家公司拥有多种工作岗位。

我的数据库有 2 个表:Companys 和 Jobs,其中一个公司有多个职位,一个职位有一个公司。工作还具有“level_of_interest”属性,该属性应用于计算用户对公司的整体兴趣。

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

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

然后使用 Ruby 将公司从生成的哈希中提取出来,但我认为可能有一种方法可以纯粹使用 ActiveRecord 来完成此操作。

DB 是 PG,fwiw。

最佳答案

这样的事情应该有效:

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

关于sql - ActiveRecord:基于关联列的平均值对表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43162204/

相关文章:

ruby-on-rails - 正确使用 `rescue`(或 `try`)

ruby-on-rails - Rails 3迁移以添加未签名的int列

mysql - 无法在 vagrant box 上使用 chef cookbook 安装 mysql-client

ruby-on-rails - rails : rescue class inheritance

ruby - 在 Ruby 中使用什么 gem 来计算百分位数?

mysql - mysql中的条件反转

sql - 可以使用 postgres 获取 json 数组中值的平均值吗?

sql - SQL的count(*)函数中包含0

ruby-on-rails - 删除事件模型序列化程序中的日志消息

SQL Server ,按 24 小时周期拆分持续时间行