情况是这样的:A数据库和B数据库和C数据库中都有几张相同的表,然后我想统计这几张表中的一些信息,比如这个月卖的最好的商品前五位(表中的商品是相同的,但每个库的销售情况不同,所以需要累加),所以我需要把ABC数据库中的相关数据全部拉出来然后再进行统计,可是这样做的数据量实在是太大了好几千万,所以有没有别的统计思路,尽量逻辑简单,高效;拜谢
分别取出A, B, C数据库前五位商品
我想统计的是ABC三个库的前五位,他们分别的前五位不行,我不能3*5的去找这15位中的前五位
@不会代码的椰子: 我觉得可行,减少了数据基数。15条 甚至150条对于虚拟机比对计算是很快的
数据库之间是可以互相访问的,SELECT * FROM LinkName.数据库名.架构名.表名
SELECT * FROM OPENROWSET('SQLOLEDB', 'server=sql服务器名或IP地址;Trusted_Connection=yes',数据库名.架构名.表名)
······我没有表述清楚吗?大哥·····我是说全部拉出来数据量很大···我不想这么做
@不会代码的椰子: 那你存数据干嘛的?搞不懂你这样的人,那你直接冥想好了,嫌数据大那就不要分析了
1.取每张表的前15位
2.将数据放入临时表或者表变量
3.再关联查询
这种方案明显不行,或许A中排第16位,B中排第1位而且B的基数比A大的多,这结果就错了。
@沧海一杰: 那就将每张表的id和总销售量查询出来放到临时表,临时表做关联查询,我试过百万级别的还是没问题的
从ABC中分别拉出商品ID和月销售数量,然后再拉到一起后取前五
万物本来就没有百分百完美的解决方案,只能说找一个相对较好的,如果你觉得3x5中取前5都还是数据量大的话,那么这世界很多问题都没法解决了,就好比要求飞机用飞一千公里航程的燃油去飞一万公里
我真的很蠢······我不是说3*5取数据数据量大··而是这么取没有把数据全部拉出来取准确···所以寻求一个平衡··稍微简单而又相对可靠的方法
@不会代码的椰子:
这么取没有把数据全部拉出来取准确???
举个例子,有三个班,你要取三个班所有人中成绩最好的前5个人,那么有两个思路:
1. 分别先取出三个班成绩最好的5个人,最后得到15人,再从15人中去成绩最好的5人。
2. 把三个人所有人聚集在一起,逐个比较,最终得出前5个成绩最好的人。
你觉得那个好些?
@龙行天涯:你的比喻不对···因为这三个库里的商品种类数都是一样的····所以存在三个库累加的问题·····