首页 新闻 会员 周边 捐助

sqlserver 一个统计思路问题

0
悬赏园豆:5 [已解决问题] 解决于 2019-03-09 17:12

情况是这样的:A数据库和B数据库和C数据库中都有几张相同的表,然后我想统计这几张表中的一些信息,比如这个月卖的最好的商品前五位(表中的商品是相同的,但每个库的销售情况不同,所以需要累加),所以我需要把ABC数据库中的相关数据全部拉出来然后再进行统计,可是这样做的数据量实在是太大了好几千万,所以有没有别的统计思路,尽量逻辑简单,高效;拜谢

碗粥的主页 碗粥 | 初学一级 | 园豆:6
提问于:2017-09-22 10:03
< >
分享
最佳答案
0

分别取出A, B, C数据库前五位商品

收获园豆:1
LLSmile | 菜鸟二级 |园豆:257 | 2017-09-22 10:05

我想统计的是ABC三个库的前五位,他们分别的前五位不行,我不能3*5的去找这15位中的前五位

碗粥 | 园豆:6 (初学一级) | 2017-09-22 10:09

@不会代码的椰子: 我觉得可行,减少了数据基数。15条 甚至150条对于虚拟机比对计算是很快的

xuejiangtao | 园豆:222 (菜鸟二级) | 2017-09-23 15:05
其他回答(4)
0

 数据库之间是可以互相访问的,SELECT * FROM LinkName.数据库名.架构名.表名

SELECT * FROM OPENROWSET('SQLOLEDB', 'server=sql服务器名或IP地址;Trusted_Connection=yes',数据库名.架构名.表名)

收获园豆:1
jqw2009 | 园豆:2341 (老鸟四级) | 2017-09-22 10:11

······我没有表述清楚吗?大哥·····我是说全部拉出来数据量很大···我不想这么做

支持(0) 反对(0) 碗粥 | 园豆:6 (初学一级) | 2017-09-22 10:14

@不会代码的椰子: 那你存数据干嘛的?搞不懂你这样的人,那你直接冥想好了,嫌数据大那就不要分析了

支持(0) 反对(0) jqw2009 | 园豆:2341 (老鸟四级) | 2017-09-22 10:17
1

1.取每张表的前15位

2.将数据放入临时表或者表变量

3.再关联查询

收获园豆:1
Artikel | 园豆:387 (菜鸟二级) | 2017-09-22 10:23

这种方案明显不行,或许A中排第16位,B中排第1位而且B的基数比A大的多,这结果就错了。

支持(0) 反对(0) 空明流光 | 园豆:111 (初学一级) | 2017-09-22 14:00

@沧海一杰: 那就将每张表的id和总销售量查询出来放到临时表,临时表做关联查询,我试过百万级别的还是没问题的

支持(0) 反对(0) Artikel | 园豆:387 (菜鸟二级) | 2017-09-22 17:42
0

从ABC中分别拉出商品ID和月销售数量,然后再拉到一起后取前五

收获园豆:1
空明流光 | 园豆:111 (初学一级) | 2017-09-22 13:59
0

万物本来就没有百分百完美的解决方案,只能说找一个相对较好的,如果你觉得3x5中取前5都还是数据量大的话,那么这世界很多问题都没法解决了,就好比要求飞机用飞一千公里航程的燃油去飞一万公里

收获园豆:1
龙行天涯 | 园豆:1794 (小虾三级) | 2017-09-22 16:46

我真的很蠢······我不是说3*5取数据数据量大··而是这么取没有把数据全部拉出来取准确···所以寻求一个平衡··稍微简单而又相对可靠的方法

支持(0) 反对(0) 碗粥 | 园豆:6 (初学一级) | 2017-09-22 16:49

@不会代码的椰子:

这么取没有把数据全部拉出来取准确???

举个例子,有三个班,你要取三个班所有人中成绩最好的前5个人,那么有两个思路:

1. 分别先取出三个班成绩最好的5个人,最后得到15人,再从15人中去成绩最好的5人。

2. 把三个人所有人聚集在一起,逐个比较,最终得出前5个成绩最好的人。

 

你觉得那个好些?

支持(0) 反对(0) 龙行天涯 | 园豆:1794 (小虾三级) | 2017-09-22 16:58

@龙行天涯:你的比喻不对···因为这三个库里的商品种类数都是一样的····所以存在三个库累加的问题·····

支持(0) 反对(0) 碗粥 | 园豆:6 (初学一级) | 2017-09-22 17:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册