如果我有两个像这样设置的单独的表:
University 1:
student major year gpa
University 2:
student major address gpa hometown extra curriculars
有没有办法让我按该专业的最高 gpa 排序专业?抱歉,这可能是一个简单的问题,不过我对 Ruby on Rails 还是很陌生。谢谢!
如果我有两个像这样设置的单独的表:
University 1:
student major year gpa
University 2:
student major address gpa hometown extra curriculars
有没有办法让我按该专业的最高 gpa 排序专业?抱歉,这可能是一个简单的问题,不过我对 Ruby on Rails 还是很陌生。谢谢!
这是 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")
如果你想在两所大学中按专业获得最高的 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 为值。