首页 > 代码库 > 品牌下按2为标准进行价格分段

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

需求:今天总裁办提出了一个需求,按品牌进行价格分段。例如:海尔品牌的一种型号电视为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;

算法如下:

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

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

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

建立间隔为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

结果如下:

(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;

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