2012-05-02 85 views
1

如果我有兩個獨立的表建立這樣的:表加入Ruby on Rails的

University 1: 

student major year gpa 


University 2: 

student major address gpa hometown extra curriculars 

有沒有辦法,我能得到通過在各大頂級GPA分類專業?對不起,這可能是一個簡單的問題,但我對Ruby on Rails相當新穎。謝謝!

+1

我想回答這個問題,有一個問題:爲什麼大學1和大學2需要單獨的表?似乎他們都應該在名爲大學的表格中。那麼你可以簡單地調用University.select(「DISTINCT gpa」)。order(「gpa DESC」) – botbot

+0

這更多的是一個例子。我實際使用的兩張桌子不能合併爲一張。對不起,我應該在帖子中說得更清楚。 – NSchulze

+0

你想爲每所大學的每個專業提供最高的GPA嗎?例如。如果#1中的頂級數學GPA是3.9,#2中的頂級數學GPA是3.5,那麼您希望您的結果集僅包含「數學,3.9」還是包含「數學3.5」? –

回答

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的哈希大學作爲價值。

+0

我會打電話的find_by_sql什麼變量(「選擇專業,MAX(GPA)AS GPA FROM (選擇專業,MAX(GPA)AS GPA FROM UNIVERSITY_1 GROUP BY主要 UNION 選擇所學專業,MAX(GPA)AS GPA FROM UNIVERSITY_2 GROUP BY major) GROUP BY major ORDER BY GPA DESC「)以使其正常工作? University1? – NSchulze

+0

任何模型類都可以工作,例如UniversityOne.find_by_sql(...)或UniversityTwo.find_by_sql(...)。 –

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") 
+0

如果您想爲每個表獲得單獨的列表,除了SELECT *會因SELECT分句中的字段沒有分組而被炸燬,並且SELECT子句中沒有MAX(GPA) ,所以你不能通過它來訂購。相反,我想你會想: '選擇所學專業,MAX(GPA) 大學 GROUP BY主要 ORDER BY MAX(GPA)' 不過我認爲ActiveRecord的代碼,讓你在那裏。 –

+1

是的,當我學習規則時,你只能按選擇字段排序。但數據庫也使您擁有所有非聚合字段,並且其他規則已更改。 –

+0

那怎麼樣 - 謝謝! –