2

我正在尝试使用 activerecord 进行更高级的查询,但无法找出编写它的最佳方法。希望这是有道理的......

我的 POSTGRES/rails 应用程序有模型:

Company has_many :employees
Employee has_many :evaluations

评估有小数列:score。我想按名称获得公司的 10 个最低评价分数。但我也只想从每个员工那里得到一个最低分。我不希望我的结果列表中的 10 个分数中有 5 个都来自同一个员工 ID。

我有:

@list = Company.where(:name => 'Google').joins(:evaluations)

但是我正在努力解决如何将评估限制在单个employee.id 上的单个低值

做这个的最好方式是什么?

4

2 回答 2

3

这是“我的头上”的猜测:

Employee.
  select('employees.*, min(evaluations.score) as lowest_score').
  joins(:company, :evaluations).
  where(:company => {:name => 'Google'}).
  group('employees.id').
  order('lowest_score').
  limit(10)
于 2013-05-03T18:05:01.653 回答
0
@list = Evaluation.joins(:employee => :company)
  .where(:company => { :name =>  "Google" })
  .order(:score)
  .group(:employee => :id)
  .first(10)

IIRC,按分数排序应该意味着你不必为 min 函数和东西而烦恼,因为它会在进行分组时选择第一条记录,这将是最低分。试一试。

于 2013-05-03T18:10:08.433 回答