sql语句下的同比,环比操作
题目:有两个表
表一:销售明细
表二:产品明细
需求:查询2020年,每月的销售额,以及同比环比,并按照年月进行升序排序
- 建数据库
- 建表
- 插入数据
偷个懒,这些语句就先省略了
给看个截图
ps: 建表时时间要选择datetime ,后面要对时间进行操作的~
思路:分步操作
- 获得每月的数据
首先的抽取时间,以及获得每个月的销售额,要有 销售额,两个表肯定是要连接起来的
------- 获取时间
YEAR(字段名)—获取年份
MONTH(字段名)----获取时间
SELECT YEAR(s.sail_time) 年, MONTH(s.sail_time) 月 , SUM(s.number*p.pro_price) 销售额
FROM sail_info s
LEFT JOIN produce_detail p
ON s.produce_id=p.produce_id
GROUP BY YEAR(s.sail_time) , MONTH(s.sail_time)
此处使用左连接的原因:是要补充销售表里单品的价格,要以左表为基准,要用了左连接
结果:
- 单步操作获得同比数据
同比:一般情况下是今年第n月与去年第n月比
计算方式:同比增长率=(本期数-同期数)÷同期数×100%
所以要有个本期数据与同期数据一一对应的表,那就要本期数据与同期数据分离
有了第一步之后很容易获得数据
本期数据:
SELECT YEAR(s.sail_time) 年, MONTH(s.sail_time) 月 , SUM(s.number*p.pro_price) 销售额
FROM sail_info s
LEFT JOIN produce_detail p
ON s.produce_id=p.produce_id
where YEAR(s.sail_time)=2020
GROUP BY YEAR(s.sail_time) , MONTH(s.sail_time)
同期数据:
SELECT YEAR(s.sail_time) 年, MONTH(s.sail_time) 月 , SUM(s.number*p.pro_price) 销售额
FROM sai