1

如果我有两个像这样设置的单独的表:

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 中完成。(在获得结果之后在 ruby​​ 代码中执行此操作非常清楚,您应该能够弄清楚。)

SELECT *
FROM university
GROUP BY major
ORDER BY MAX(gpa) DESC

所以,在 Rails 2.x

University.find(:group => "major", :order => "MAX(gpa) DESC")

在 Rails 3.0 中

University.group("major").order("MAX(gpa) DESC")
于 2012-05-02T10:31:41.947 回答
0

如果你想在两所大学中按专业获得最高的 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-er/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 回答