码迷,mamicode.com
首页 > 其他好文 > 详细

品牌下按2为标准进行价格分段

时间:2014-06-28 10:18:18      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:blog   http   数据   2014   算法      

需求:今天总裁办提出了一个需求,按品牌进行价格分段。例如:海尔品牌的一种型号电视为3000元,而另外一种型号为3200。那么按3000-3002,3002-3004,3004-3006……3198-3200的标准进行价格分段,求每段价格的订单数,销售金额等等指标。供他们查看在哪一种价格段的商品卖得更好。

建立模型如下:

按价格段进行分段,间隔为2.

创建表:

create table tmp (TID int,MinPrice int,MaxPrice int)

insert into tmp values(1,70,80);

insert into tmp values(2,60,90)

则数据如下:

select * from tmp;

bubuko.com,布布扣

算法如下:

(1)建立间隔为2的模型:

select * from (select level lvl from dual connect by level<=30) where mod(lvl,2)=0

这里面的30代表是每一行中跨度之间的最大值。而mod(lvl,2)表示的是间隔为2.

bubuko.com,布布扣

建立间隔为2的模型也可以用如下方法:

SELECT *

  FROM (SELECT rownum lvl FROM dual CONNECT BY rownum <= 30) t

 WHERE MOD(lvl, 2) = 0

(2)       与表tmp进行笛卡尔积:

select t.tid,t.minprice+t1.lvl,t.minprice+t1.lvl+2 from tmp t

inner join (select * from (select level lvl from dual connect by level<=30) where mod(lvl,2)=0 )t1

on 1=1

order by 1,2

结果如下:

bubuko.com,布布扣

(3) 进行排序筛选:( 筛选条件:t.minprice+t1.lvl + 2 - t.maxprice < 2)

select t.tid,t.minprice+t1.lvl,t.minprice+t1.lvl+2 from tmp t

inner join (select * from (select level lvl from dual connect by level<=30) where mod(lvl,2)=0 )t1

on 1=1

where   t.minprice+t1.lvl + 2 - t.maxprice < 2

ORDER BY 1,2;

bubuko.com,布布扣

总结:这个方案能实现这个需求,但是最后考虑到公司的数据量太大,太大,加上中间采用了笛卡尔积,而且每个品牌下面的价格跨度也很大,所以最终没有实现。但是这个模型对于数据量小来说是比较好的模型。

 

品牌下按2为标准进行价格分段,布布扣,bubuko.com

品牌下按2为标准进行价格分段

标签:blog   http   数据   2014   算法      

原文地址:http://www.cnblogs.com/HeiSe2014/p/3804190.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!