如果我有兩個獨立的表建立這樣的:表加入Ruby on Rails的
University 1:
student major year gpa
University 2:
student major address gpa hometown extra curriculars
有沒有辦法,我能得到通過在各大頂級GPA分類專業?對不起,這可能是一個簡單的問題,但我對Ruby on Rails相當新穎。謝謝!
如果我有兩個獨立的表建立這樣的:表加入Ruby on Rails的
University 1:
student major year gpa
University 2:
student major address gpa hometown extra curriculars
有沒有辦法,我能得到通過在各大頂級GPA分類專業?對不起,這可能是一個簡單的問題,但我對Ruby on Rails相當新穎。謝謝!
如果你想通過在兩個校主要有頂部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的哈希大學作爲價值。
我會打電話的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
任何模型類都可以工作,例如UniversityOne.find_by_sql(...)或UniversityTwo.find_by_sql(...)。 –
這是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")
如果您想爲每個表獲得單獨的列表,除了SELECT *會因SELECT分句中的字段沒有分組而被炸燬,並且SELECT子句中沒有MAX(GPA) ,所以你不能通過它來訂購。相反,我想你會想: '選擇所學專業,MAX(GPA) 大學 GROUP BY主要 ORDER BY MAX(GPA)' 不過我認爲ActiveRecord的代碼,讓你在那裏。 –
是的,當我學習規則時,你只能按選擇字段排序。但數據庫也使您擁有所有非聚合字段,並且其他規則已更改。 –
那怎麼樣 - 謝謝! –
我想回答這個問題,有一個問題:爲什麼大學1和大學2需要單獨的表?似乎他們都應該在名爲大學的表格中。那麼你可以簡單地調用University.select(「DISTINCT gpa」)。order(「gpa DESC」) – botbot
這更多的是一個例子。我實際使用的兩張桌子不能合併爲一張。對不起,我應該在帖子中說得更清楚。 – NSchulze
你想爲每所大學的每個專業提供最高的GPA嗎?例如。如果#1中的頂級數學GPA是3.9,#2中的頂級數學GPA是3.5,那麼您希望您的結果集僅包含「數學,3.9」還是包含「數學3.5」? –