连锁店商场的老板,是个守财奴式的人物,他对数目看得很严,所以他提出了这样的一个需求:
在一个sql语句里返回以下内容
1、昨天所有商场的交易金额
2、假设昨天是周一,显示再前面3个周一的交易金额。
3、将前面4个周一的交易金额取平均值
4、平均值与昨天的交易量来个对比商场交易记录表如下:商场号 日期 交易金额需要得到的sql结果如下:商场号 昨天金额 一周前 两周前 三周前 比率
我写的sql语句如下:select a.shopid,昨天,上周,两周前,三周前,一月前,(昨天+上周+两周前+三周前)/4 平均 ,昨天/平均 比率 from
(select shopid,amount 昨天 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-1) a,
(select shopid,amount 上周 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-8) b,
(select shopid,amount 两周前 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-15) c,
(select shopid,amount 三周前 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-22) d
where a.shopid=b.shopid and b.shopid=c.shopid and c.shopid=d.shopid
应该怎么优化呢?
在一个sql语句里返回以下内容
1、昨天所有商场的交易金额
2、假设昨天是周一,显示再前面3个周一的交易金额。
3、将前面4个周一的交易金额取平均值
4、平均值与昨天的交易量来个对比商场交易记录表如下:商场号 日期 交易金额需要得到的sql结果如下:商场号 昨天金额 一周前 两周前 三周前 比率
我写的sql语句如下:select a.shopid,昨天,上周,两周前,三周前,一月前,(昨天+上周+两周前+三周前)/4 平均 ,昨天/平均 比率 from
(select shopid,amount 昨天 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-1) a,
(select shopid,amount 上周 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-8) b,
(select shopid,amount 两周前 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-15) c,
(select shopid,amount 三周前 from shopn_daystat where trunc(r_date)=Trunc(sysdate)-22) d
where a.shopid=b.shopid and b.shopid=c.shopid and c.shopid=d.shopid
应该怎么优化呢?
(昨天+上周+两周前+三周前)/4 平均 ,昨天/平均 比率
from (
select shopid, max(Case when trunc(r_date)=Trunc(sysdate)-1)
then amount else 0 end) as 昨天 ,
max(Case when trunc(r_date)=Trunc(sysdate)-8)
then amount else 0 end) as 上周 ,
max(Case when trunc(r_date)=Trunc(sysdate)-15)
then amount else 0 end) as 两周前 ,
max(Case when trunc(r_date)=Trunc(sysdate)-22)
then amount else 0 end) as 三周前 ,
from shopn_daystat
Where r_date>=Trunc(sysdate)-22 group by shopid
) a
(昨天+上周+两周前+三周前)/4 平均 ,
昨天/(昨天+上周+两周前+三周前)*4.0 比率
from (
select shopid, max(Case when trunc(r_date)=Trunc(sysdate)-1)
then amount else 0 end) as 昨天 ,
max(Case when trunc(r_date)=Trunc(sysdate)-8)
then amount else 0 end) as 上周 ,
max(Case when trunc(r_date)=Trunc(sysdate)-15)
then amount else 0 end) as 两周前 ,
max(Case when trunc(r_date)=Trunc(sysdate)-22)
then amount else 0 end) as 三周前 ,
from shopn_daystat
Where r_date>=Trunc(sysdate)-22 group by shopid
) a