次のように 2 つの別々のテーブルを設定した場合:
University 1:
student major year gpa
University 2:
student major address gpa hometown extra curriculars
その専攻のトップ gpa でメジャーをソートする方法はありますか? 申し訳ありませんが、これはおそらく簡単な質問ですが、私は Ruby on Rails にかなり慣れていません。ありがとう!
次のように 2 つの別々のテーブルを設定した場合:
University 1:
student major year gpa
University 2:
student major address gpa hometown extra curriculars
その専攻のトップ gpa でメジャーをソートする方法はありますか? 申し訳ありませんが、これはおそらく簡単な質問ですが、私は Ruby on Rails にかなり慣れていません。ありがとう!
これはSQLがうまく機能するものなので、SQLで実行できます。(結果を得るために後でルビーコードでこれを行うことは、あなたがそれを理解することができるはずであるのに十分明確です。)
SELECT *
FROM university
GROUP BY major
ORDER BY MAX(gpa) DESC
したがって、Rails2.xでは
University.find(:group => "major", :order => "MAX(gpa) DESC")
Rails3.0では
University.group("major").order("MAX(gpa) DESC")
2 つの大学で主要な GPA のトップを取得したい場合、SQL は次のようになります。たとえば、次のようになります。
SELECT major, MAX(GPA) AS GPA FROM
(SELECT major, MAX(GPA) AS GPA FROM UNIVERSITY_1
GROUP BY major
UNION
SELECT major, MAX(GPA) AS GPA FROM UNIVERSITY_2
GROUP BY major)
GROUP BY major
ORDER BY GPA DESC
Arel でそのクエリを表現する方法がわかりません。ユニオンがどのように機能するかわかりません。知っておくとよいでしょう。それまでの間、いつでも find_by_sql を使用して生の SQL から結果セットを取得できます。
編集:
それを行うためのいくぶんRuby/Railsierな方法は次のとおりです。
u_one = UniversityOne.maximum :gpa, :group => 'major'
u_two = UniversityTwo.maximum :gpa, :group => 'major'
u_combined = u_one.merge(u_two) { |k, one, two| [one,two].max }
u_combinedメジャーをキーとし、大学全体の最大 gpa を値とするハッシュになります。