求一个大数据数据统计sql写法

许添翼 发布于 2014/06/27 21:38
阅读 355
收藏 0

现有一个mysql表,大致结构如下

id pid num update
155 24 100 14060820
156 24 105 14060821
157 24 115 14060822
158 25 54 14060820
159 25 59 14060821
160 25 61 14060822
161 26 9754 14060820
162 26 10000 14060821
163 26 10020 14060822

分别是id,产品id,销量,销量更新年月日小时。这个销量更新时间是每小时一次,从00开始到23结束。
求mysql下最优的,计算一天内销量最好的十个产品的sql写法。 
我不是开发人员,我是个小产品,为了锻炼自己所以试着写sql,我知道用函数可以写,或者直接写php来分析也很方便,但我想知道成本最低,效率最高的写法是怎样的。想知道正确的是按照怎样的思维去设计的。 
产品有一万多,每小时一次更新,每天都有,所以效率很重要。 
拓展开来,如果我要统计一个月内销量最高的十个产品又该怎么用怎样的思路去设计?
我很愿意请大家都认同的同志吃饭,不过前提是在上海。

加载中
0
许添翼
许添翼
@红薯 安卓发的内容是把所有换行和多余空格都去掉了。。。。
红薯
红薯
不是,原文的格式就没弄好
0
中山野鬼
中山野鬼
sql不知道。写处理算法,还有点思路。哈。
许添翼
许添翼
求思路,其实对我来说学习思路更重要
0
中山野鬼
中山野鬼
每小时上来多数据做排序咯。1万个物品销量数据的排序,要不了多少时间。排序完,累加咯。1万个累加也要不了多少时间。哈。不考虑并发处理,就算200个cycle完成一次加法,2.0G的cpu,单进程,1万个加法不过2Mcycle,1个毫秒搞定咯。哈。
0
许添翼
许添翼
调整了一下样式,继续求
0
ericsoul
ericsoul
select pid,sum(num) from table where substr(update,1,6)=140628 group by pid order by sum(num) desc一万个商品,每小时一条一天也就24w,这个数据量,sql应该没压力。我用oracle的,不过mysql的语法应该差不多。
许添翼
许添翼
回复 @qzxun : 每天的销售数据并非从0开始。所以需要计算where(当天update最大值)减去where(当天update最小值)求得一天的销售量。如果计算的是总数那只能是所有产品中销量最好的,而非当天的。
qzxun
qzxun
你的不是某个时间段销售量吗?怎么会需要减去呢?只是加个时间范围控制
许添翼
许添翼
谢谢回答,与需求有点出入 我需要求得销量最好的十个产品,也就是update == 14060823的产品销量减去 update == 1406082300 销量的值的排序 ^_^
ericsoul
ericsoul
呃,手机不知道怎么回复回复,, ,嗯,ls对答案进行了优化,这涉及到所谓的数据库设计了。可以分月表,每个月31个分区。
qzxun
qzxun
在where使用函数对字段处理,效率慢的,一天24w,一个月600w一年数据量就上去了,建立索引,优化sql,数据量大了就做分区
返回顶部
顶部