1

次のように 2 つの別々のテーブルを設定した場合:

University 1:

student   major   year    gpa


University 2:

student   major   address   gpa   hometown  extra curriculars

その専攻のトップ gpa でメジャーをソートする方法はありますか? 申し訳ありませんが、これはおそらく簡単な質問ですが、私は Ruby on Rails にかなり慣れていません。ありがとう!

4

2 に答える 2

0

これは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")
于 2012-05-02T10:31:41.947 に答える
0

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 を値とするハッシュになります。

于 2012-05-02T10:56:46.323 に答える