2011-05-12 70 views
0

我非常需要一些幫助。我一直負責將我們團隊的實用程序放在一起,用於對數據文件進行一些基本的分析。我現在每天都不用編碼,所以我有點生疏。我會盡量簡潔地描述我的問題。從單一ActiveRecord模型複雜分組

場景:列表運營團隊爲電子郵件營銷活動創建數據文件。營銷活動是多個細分的;每個段由一個鍵碼標識。平均記錄總數約爲45萬,文件大小約爲20MB。

我們現在有嚴重的枯竭問題,因此營銷部門希望對分段的gmail,yahoo和hotmail地址的記錄數進行一些基本分析。

當前狀態:我創建了一個Rails 3應用程序,允許用戶上傳多個文件並將這些記錄保存在MySQL數據庫中。

這裏的數據庫記錄將是什麼樣子,不包括標準的領域,如ID和時間戳一個非常基本的樣本:

domain  eid keycode 
YAHOO.COM 42886 GY4103 
HOTMAIL.COM 53012 GY4103 
YAHOO.COM 53952 GY4103 
AOL.COM  54327 GY4103 
COMCAST.NET 55134 MX4155 
GMAIL.COM 59157 MX4155 
AOL.COM  59823 MX4155 
AOL.COM  60384 MX4161 
MSN.COM  64720 MX4161 
YAHOO.COM 67790 MX4161 
GMAIL.COM 73537 MX4161 
YAHOO.COM 76747 MX4161 
HOTMAIL.COM 71467 MX4161 
GMAIL.COM 84280 MX4161 

問題:我需要分析呈現給最終用戶作爲:

Keycode 
GY4103 
    Domain  Count 
    YAHOO.COM 2 
    HOTMAIL.COM 1 
    OTHER  1 
MX4155 
    Domain  Count 
    GMAIL.COM 1 
    OTHER  2 
MX4161 
    Domain  Count 
    YAHOO.COM 2 
    HOTMAIL.COM 1 
    GMAIL.COM 2 
    OTHER  2 

如果我是像水晶報表,我只想用的鍵碼組,然後由域,然後在該EID的計數,做一些調整,只顯示3個領域我想永遠別的「其他」,我完成了!但是,在這裏不可能使用CR。

所以我假設我是在創建了一些類型的樹結構或層次結構後,在頂層使用Keycode,然後是域下的數據,然後在該數據下計數?我開始看看祖先的寶石,但我並沒有真正瞭解它。

任何人都可以提供的幫助將非常感謝,特別是考慮到我需要在明天中午之前提供此服務。

回答

2

我可能會在這裏混合一點手動SQL,因爲它似乎是一個如此龐大的數據集來處理。也許是這樣的:

# CONTROLLER 
# Load the data from the database and group on keycode and domain. 
# You will only get one record for each unique combination of domain and keycode 
@records = MyModel.select("keycode, domain, COUNT(eid) AS eids").group("keycode, domain") 

# convert the array of records into a hash where every key is a unique keycode 
# and the value is an array of records for all the domains for that keycode 
@records = @records.group_by(&:keycode) 

# VIEW 
<% @records.keys.each do |keycode| %> 
    <h1><%= keycode %></h1> 
    <% @records[keycode].each do |record| %> 
    <p><%= record.domain %>: <%= record.eids %></p> 
    <% end %> 
<% end %> 

我希望我正確

+0

明白了一切你就死定了!現在看起來很簡單!無論如何,感謝您的幫助......只讓4小時的睡眠值得:) – 2011-05-12 16:16:08