以文本方式查看主题

-  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的发言:

无法下载,我没有快盘。

随便注册个号就能下载了,

提供个

用户:foxtable@163.com

密码: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还是很快的。