我正在尝试使用activerecord进行更高级的查询,但无法找出编写它的最佳方法。希望这是有道理的......
我的POSTGRES / rails app有型号:
Company has_many :employees
Employee has_many :evaluations
评估有十进制列:得分。我希望按名称获得公司10个最低评估分数。但我也只想从每位员工那里获得一个单一的最低分。我不希望结果列表中的10个分数中有5个来自同一个员工ID。
我有:
@list = Company.where(:name => 'Google').joins(:evaluations)
但我正在努力解决如何将评估限制在单个employee.id上的单个低值。
这样做的最佳方式是什么?
答案 0 :(得分: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)
答案 1 :(得分:0)
@list = Evaluation.joins(:employee => :company)
.where(:company => { :name => "Google" })
.order(:score)
.group(:employee => :id)
.first(10)
IIRC,按分数排序应该意味着你不必费心去做min函数和东西,因为它会在进行分组时选择第一条记录,这将是最低分。给它一个旋转。