题目

题目要求

模板要求

处理数据集

此题主要是使用sql来处理销售量的同比环比问题。这里的同期为一个月份

同比:(今年同期 - 去年同期)/ 去年同期 * 100%

环比: (同期 - 上期) / 上期 * 100%

同比的计算分别需要今年和上年的按月汇总数据,所以需要做一次表关联。

环比的计算使用lag()函数取到按月份排序的上一条数据即可。

年月销售数据表具体sql:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
with sum_table as(
SELECT CAST(substr(s.订购日期,1,4) AS INTEGER) years
,CAST(substr(s.订购日期,6,2) AS INTEGER) months
,substr(s.订购日期,1,7) "年月"
,sum(t.数量) "当月销售"
FROM 订单 s ,订单明细 t
WHERE 1 = 1
AND s.订单ID = t.订单ID
AND substr(s.订购日期,1,4) BETWEEN '${years - 1}' AND '${years}'
GROUP BY substr(s.订购日期,1,4),substr(s.订购日期,6,2)
)
SELECT b.年月,b.当月销售,b.同比增长率,b.环比增长率
FROM
(
SELECT a.*
,ROUND((a.当月销售 - b.当月销售) / b.当月销售 * 100,1)||'%' "同比增长率"
,ROUND((a.当月销售 - LAG(a.当月销售,1) OVER ( ORDER BY a.years,a.months)) / LAG(a.当月销售,1) OVER ( ORDER BY a.years,a.months) * 100,1) || '%' "环比增长率"
from sum_table a
LEFT JOIN sum_table b
ON a.months = b.months
AND a.years = b.years + 1
WHERE 1 = 1
)b
WHERE b.years = ${years}

注意:由于FRDemo使用的是SQLite数据库,所以sql中存在一些SQLite特性的方法。

查询控件

日期控件:
格式为 yyyy
返回值的类型为字符串

主表设计

主表主要用于展示数据,比较简单。

表头: $years + ‘年销售同比环比数据’

表体:

年月 当月销售 同比增长率 环比增长率
年月销售数据.年月 年月销售数据.当月销售 年月销售数据.同比增长率 年月销售数据.环比增长率

风格: 与前几题相似。

成果预览