我迫切需要一些帮助。我的任务是为我们的一个团队投入一个实用工具,用于对数据文件进行一些基本的分析。我现在已经远离编码了一段时间,所以我有点生疏了。我会尽量简明扼要地描述我的问题。
场景:列表运营团队为电子邮件营销活动创建数据文件。营销活动是多分段的;每个段由一个键码识别。记录总数平均约为450,000,文件大小约为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
如果我在像Crystal Reports这样的东西,我会按键码分组,然后按域分组,然后根据其进行分组,进行一些调整,只显示我想要的3个域以及其他所有域名“其他“我已经完成了!但是,这里不可能使用CR。
所以我假设我在创建了某种类型的树结构或层次结构,其中Keycode位于顶层,然后是域下的域,并且计数在那之下?我开始看看Ancestry的宝石,但我并没有真正得到它。
任何人都可以提供任何帮助都会非常感激,特别是考虑到我需要在明天中午之前提供这些帮助。
答案 0 :(得分: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 %>
我希望我能正确理解一切