请问练习题中,求同比和环比的题

其中年份精准到年-月,默认数据是带天数的,如何用sql去做呢,每月销量怎么去求?所用的是订单表和订单明细表

下图是用订单表左连接订单明细表中取出的数据

image.png

FineReport yzmWAXjS1131571 发布于 2022-9-19 10:56 (编辑于 2022-9-20 11:09)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
snrtuemcLv8专家互助
发布于2022-9-19 11:23

直接这个sql

image.png

select t.m,t.ym,

      t.销量,

      t1.销量 同期,

      (case when t1.销量 is null then '' 

          else (t.销量-t1.销量)/t1.销量 end) 同比,

      t2.销量 上期,

      (case when t2.销量 is null then '' 

          else (t.销量-t2.销量)/t2.销量 end) 环比

from 

(

select strftime('%m',b.订购日期)+0 m,

      strftime('%Y-%m',b.订购日期) ym,

      sum(a.数量) 销量

from 订单明细 a

    left join 订单 b on a.订单ID=b.订单ID

where strftime('%Y',b.订购日期) = '${y}'

group by strftime('%Y-%m',b.订购日期)

) t

left join

(

select strftime('%m',b.订购日期)+0 m,

      strftime('%Y-%m',b.订购日期) ym,

      sum(a.数量) 销量

from 订单明细 a

    left join 订单 b on a.订单ID=b.订单ID

where strftime('%Y',b.订购日期) = '${y-1}'

group by strftime('%Y-%m',b.订购日期)

) t1 on t.m=t1.m

left join

(

select (case when strftime('%m',b.订购日期)+0 <=11

        then strftime('%m',b.订购日期)+1 end) m,

      strftime('%Y-%m',b.订购日期) ym,

      sum(a.数量) 销量

from 订单明细 a

    left join 订单 b on a.订单ID=b.订单ID

where strftime('%Y',b.订购日期) = '${y}'

group by strftime('%Y-%m',b.订购日期)

union

select (case when strftime('%m',b.订购日期)+0 =12

        then 1 end) m,

      strftime('%Y-%m',b.订购日期) ym,

      sum(a.数量) 销量

from 订单明细 a

    left join 订单 b on a.订单ID=b.订单ID

where strftime('%Y',b.订购日期) = '${y-1}'

group by strftime('%Y-%m',b.订购日期)

) t2 on t.m=t2.m

最佳回答
0
我在等风也等你Lv6初级互助
发布于2022-9-19 10:59

用substr(时间,7)函数,裁剪时间到月份,然后sum()销量,分组group by substr(时间,7),求每月销量,

  • yzmWAXjS1131571 yzmWAXjS1131571(提问者) 谢谢帮助,用了substr函数,是可行的。有个情况,由于题目中只需要1997年的数据,默认按照这个方法,筛选出所有年份的数据,我尝试后面加上and 订购日期 like \'%1997%\',做过滤,但是结果是过滤出只有年份,没有月份的数据
    2022-09-19 11:37 
  • 我在等风也等你 我在等风也等你 回复 yzmWAXjS1131571(提问者) 过滤出只有年份的数据,没有月份,是你截取的不够长,你把月份截取出来,就有月了,而且不用like年 可以这样写andsubstr(时间,4)=\'1997\'
    2022-09-19 13:44 
最佳回答
0
18387099203Lv5见习互助
发布于2022-9-19 11:00

left公式把日期转为年月,按年月进行分组统计。

  • 4关注人数
  • 340浏览人数
  • 最后回答于:2022-9-20 11:09
    请选择关闭问题的原因
    确定 取消
    返回顶部