2

私はアクティブレコードでより高度なクエリを実行しようとしていますが、それを記述する最良の方法がわかりません。うまくいけば、これは理にかなっています...

私の 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 に答える