MySQL中计算环比、同比(年、月、季度)

作者:很酷cat2024.02.16 01:37浏览量:169

简介:在MySQL中计算环比和同比需要使用到日期函数和SQL查询技巧。下面分别介绍如何计算年、月和季度的环比和同比。

在MySQL中,我们可以使用日期函数和SQL查询技巧来计算环比和同比。环比是指与上一周期相比的增长率,同比是指与去年同期相比的增长率。下面我们将分别介绍如何计算年、月和季度的环比和同比。

一、年环比增长率和同比增长率

  1. 年环比增长率的计算公式为:(本年度数据 - 上一年度数据) / 上一年度数据 * 100%。在MySQL中,可以使用DATE_SUB()函数来获取上一年度的数据。
  1. SELECT
  2. (SUM(sales) - SUM(DATE_SUB(date, INTERVAL 1 YEAR) OVER (PARTITION BY year ORDER BY date))) / SUM(DATE_SUB(date, INTERVAL 1 YEAR) OVER (PARTITION BY year ORDER BY date)) * 100 AS year_growth_rate
  3. FROM sales_table;
  1. 年同比增长率的计算公式为:(本年度数据 / 上一年度数据 - 1) * 100%。在MySQL中,可以使用CASE WHEN语句来区分本年度和上一年度的数据。
  1. SELECT
  2. SUM(CASE WHEN year = YEAR(CURRENT_DATE) THEN sales ELSE 0 END) AS current_year_sales,
  3. SUM(CASE WHEN year = YEAR(DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR)) THEN sales ELSE 0 END) AS last_year_sales,
  4. ((current_year_sales - last_year_sales) / last_year_sales) * 100 AS year_growth_rate
  5. FROM sales_table;

二、月环比增长率和同比增长率

  1. 月环比增长率的计算公式为:(本月数据 - 上月数据) / 上月数据 * 100%。在MySQL中,可以使用LAG()函数来获取上月的同期数据。
  1. SELECT
  2. (SUM(sales) - LAG(SUM(sales), 1) OVER (ORDER BY date)) / LAG(SUM(sales), 1) OVER (ORDER BY date) * 100 AS month_growth_rate
  3. FROM sales_table;
  1. 月同比增长率的计算公式为:(本月数据 / 上月数据 - 1) * 100%。在MySQL中,可以使用LAG()函数和CASE WHEN语句来区分本月和上月的同期数据。
  1. SELECT
  2. SUM(CASE WHEN month = MONTH(CURRENT_DATE) THEN sales ELSE 0 END) AS current_month_sales,
  3. SUM(CASE WHEN month = MONTH(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)) THEN sales ELSE 0 END) AS last_month_sales,
  4. ((current_month_sales - last_month_sales) / last_month_sales) * 100 AS month_growth_rate
  5. FROM sales_table;

三、季度环比增长率和同比增长率

  1. 季度环比增长率的计算公式为:(本季度数据 - 上季度数据) / 上季度数据 * 100%。在MySQL中,可以使用DATE_SUB()函数和QUARTER()函数来获取上季度的同期数据。
  1. SELECT
  2. (SUM(sales) - SUM(DATE_SUB(date, INTERVAL QUARTER(date) - 1 QUARTER) OVER (ORDER BY date))) / SUM(DATE_SUB(date, INTERVAL QUARTER(date) - 1 QUARTER) OVER (ORDER BY date)) * 100 AS quarter_growth_rate
  3. FROM sales_table;
  1. 季度同比增长率的计算公式为:(本季度数据 / 上季度数据 - 1) * 100%。在MySQL中,可以使用CASE WHEN语句和QUARTER()函数来区分本季度和上季度的同期数据。

```sql
SELECT
SUM(CASE WHEN quarter = QUARTER(CURRENT_DATE) THEN sales ELSE 0 END) AS current_quarter_sales,
SUM(CASE WHEN quarter = QUARTER(DATE_SUB(CURRENT_DATE, INTERVAL 1 QUARTER)) THEN sales ELSE 0 END) AS last_quarter_sales,