一、什么是同比和环比
-
同比:通常指当前时间段与上一年同一时间段的比较。比如,2023年3月的销售额与2022年3月的销售额进行比较,以此来评估业务的年度增长情况。
-
环比:通常指当前时间段与上一个时间段的比较。比如,2023年3月的销售额与2023年2月的销售额进行比较,以此来评估业务的月度增长情况。
二、准备数据
在进行同比和环比计算之前,我们需要有一个合适的数据表。假设我们有一个销售数据表 sales_data
,其中包含以下字段:
sales_date
:销售日期amount
:销售金额
示例数据如下:
sales_date | amount |
---|---|
2022-03-01 | 1000 |
2022-03-02 | 1500 |
2023-02-01 | 2000 |
2023-03-01 | 2500 |
三、计算同比
计算同比的SQL查询可以使用 LAG
函数来获得去年同一时间的数据。以下是一个示例查询,计算2023年3月的销售额同比2022年3月的销售额:
SELECT
TO_CHAR(sales_date, 'YYYY-MM') AS sales_month,
SUM(amount) AS current_month_sales,
LAG(SUM(amount), 12) OVER (ORDER BY TO_CHAR(sales_date, 'YYYY-MM')) AS last_year_sales,
(SUM(amount) - LAG(SUM(amount), 12) OVER (ORDER BY TO_CHAR(sales_date, 'YYYY-MM'))) /
LAG(SUM(amount), 12) OVER (ORDER BY TO_CHAR(sales_date, 'YYYY-MM')) * 100 AS yoy_growth_rate
FROM
sales_data
WHERE
sales_date >= TRUNC(ADD_MONTHS(SYSDATE, -12), 'MM')
GROUP BY
TO_CHAR(sales_date, 'YYYY-MM')
ORDER BY
sales_month;
四、计算环比
计算环比的SQL查询使用 LAG
函数来获得上一个月份的数据。以下是一个示例查询,计算2023年3月的销售额环比2023年2月的销售额:
SELECT
TO_CHAR(sales_date, 'YYYY-MM') AS sales_month,
SUM(amount) AS current_month_sales,
LAG(SUM(amount), 1) OVER (ORDER BY TO_CHAR(sales_date, 'YYYY-MM')) AS last_month_sales,
(SUM(amount) - LAG(SUM(amount), 1) OVER (ORDER BY TO_CHAR(sales_date, 'YYYY-MM'))) /
LAG(SUM(amount), 1) OVER (ORDER BY TO_CHAR(sales_date, 'YYYY-MM')) * 100 AS mom_growth_rate
FROM
sales_data
WHERE
sales_date >= TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')
GROUP BY
TO_CHAR(sales_date, 'YYYY-MM')
ORDER BY
sales_month;