以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [讨论]百万行数据汇总测试 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=23091) |
-- 作者:jspta -- 发布时间:2012/9/1 18:06:00 -- [讨论]百万行数据汇总测试 《去掉最高分最低分然后求平均值有哪些思路? 》衍生出的问题 应lihe60,特上传百万行数据供测试,欢迎各位高手指教。 本次测试数据完全由VBA自动生成,数据完全随机。源文件过大,只截取了其中一部分,但包含了100W行。 简化下不求平均值,只需要将同类项“计数”列合计
以下是连接 http://www.kuaipan.cn/file/id_26575316302437646.htm
本人没有测试过需要多久,给个VBA算出的时间,3秒用于数据载入,3.000秒用于计算,并输出结果到EXCEL表(未保存) 测试环境: 笔记本 win7 旗舰版 32位 内存:3g cpu:T6600 [此贴子已经被作者于2012-9-1 21:39:36编辑过]
|
-- 作者:lihe60 -- 发布时间:2012/9/2 10:38:00 -- 以下是引用jspta在2012-9-1 18:06:00的发言:
《去掉最高分最低分然后求平均值有哪些思路? 》衍生出的问题 应lihe60,特上传百万行数据供测试,欢迎各位高手指教。 本次测试数据完全由VBA自动生成,数据完全随机。源文件过大,只截取了其中一部分,但包含了100W行。 简化下不求平均值,只需要将同类项“计数”列合计
以下是连接 http://www.kuaipan.cn/file/id_26575316302437646.htm
本人没有测试过需要多久,给个VBA算出的时间,3秒用于数据载入,3.000秒用于计算,并输出结果到EXCEL表(未保存) 测试环境: 笔记本 win7 旗舰版 32位 内存:3g cpu:T6600 [此贴子已经被作者于2012-9-1 21:39:36编辑过] 无法下载,我没有快盘。 |
-- 作者:jspta -- 发布时间:2012/9/2 11:07:00 -- 以下是引用lihe60在2012-9-2 10:38:00的发言:
无法下载,我没有快盘。 随便注册个号就能下载了, 提供个 密码:foxtable2012 |
-- 作者:lin_hailun -- 发布时间:2012/9/2 11:45:00 -- 自己编码的话,某一对象的最低分、最高分、平均分,可以在循环一遍(即100W次)得出。 就不用分别,多次汇总统计。 用空间复杂读换取时间复杂度。 |
-- 作者:jspta -- 发布时间:2012/9/2 12:41:00 -- 以下是引用lin_hailun在2012-9-2 11:45:00的发言:
自己编码的话,某一对象的最低分、最高分、平均分,可以在循环一遍(即100W次)得出。 就不用分别,多次汇总统计。 用空间复杂读换取时间复杂度。 这样存在的问题就是,表在不断变化,你这个统计表也必须跟着一起变才行。不过这种关联也很容易解决。 这100W行的数据,昨天晚上测试了下,在导入狐表的后,4秒左右统计出来没有什么问题,加上去最高和最低然后求平均,8秒左右也能完成 这个只是个讨论,我的希望的结果是,能得到比较理想的代码来解决这个问题。 |
-- 作者:reachtone -- 发布时间:2012/9/2 15:45:00 -- 以下是引用jspta在2012-9-2 12:41:00的发言:
这样存在的问题就是,表在不断变化,你这个统计表也必须跟着一起变才行。不过这种关联也很容易解决。 这100W行的数据,昨天晚上测试了下,在导入狐表的后,4秒左右统计出来没有什么问题,加上去最高和最低然后求平均,8秒左右也能完成 这个只是个讨论,我的希望的结果是,能得到比较理想的代码来解决这个问题。 100W的数据为什么要导入后再统计?列数多的话,差一点的电脑光是载入这些数据就可能会崩溃的。 直接对外部数据源统计,百万条数据也是瞬间完成: 去掉最高分、去掉最低分、统计平均值: select avg(计数) as 平均 from 百万行 where 计数>(select min(计数) from 百万行) and 计数<(select max(计数) from 百万行) |
-- 作者:jspta -- 发布时间:2012/9/2 21:10:00 -- 以下是引用reachtone在2012-9-2 15:45:00的发言:
100W的数据为什么要导入后再统计?列数多的话,差一点的电脑光是载入这些数据就可能会崩溃的。 直接对外部数据源统计,百万条数据也是瞬间完成: 去掉最高分、去掉最低分、统计平均值: select avg(计数) as 平均 from 百万行 where 计数>(select min(计数) from 百万行) and 计数<(select max(计数) from 百万行) 导入的目的是想测试那个运行更快。因为我觉得还是导入后更加快。 但导入后发现,不知道用那条语句可以执行这个已经导入到内存的外部表,它不属于内部数据源,只能算个datatable吗,那如何对这个表使用sql语句? 自带的语句完全不能满足这么大的数据要求。顺便测试了下GetUniqueValues,好像就要10几秒,比直接从数据源获取还慢。不过compute还是很快的。 |