pgSQL实现环比和同比
时间: 2024-09-23 22:05:58 浏览: 92
在 PostgreSQL (pgSQL) 中,计算环比(即相邻两个月的数据比较)和同比(即同一时期与上一年度同期数据的比较)通常涉及到日期范围的选择、聚合函数以及一些算术运算。以下是简单的步骤:
**环比(Month-over-Month, MoM)**:
假设有一个名为`sales`的表,有`date`和`amount`字段记录销售数据。
```sql
SELECT
date_trunc('month', date_column) AS month,
amount,
LAG(amount, 1) OVER (PARTITION BY date_trunc('month', date_column)) - amount AS month_over_month_change
FROM sales
ORDER BY month;
```
这里 `LAG(amount, 1)` 函数会获取当前月金额的前一个月数值,然后减去本月的金额得到环增或环降。
**同比(Year-over-Year, YoY)**:
为了计算同比增长,你需要知道对应年份的同月份数据。如果数据库中存储了完整的年度数据,可以这样做:
```sql
WITH monthly_sales AS (
SELECT
date_trunc('month', date_column) AS month,
year,
amount,
LAG(amount, 0) OVER (PARTITION BY year, date_trunc('month', date_column)) - amount AS year_over_year_change
FROM sales
)
SELECT
month,
AVG(year_over_year_change) OVER (PARTITION BY month) AS average_yoy_change
FROM monthly_sales
WHERE year = EXTRACT(YEAR FROM CURRENT_DATE) - 1;
```
这里的 `LAG(amount, 0)` 比较的是本年的同月份和去年的同月份金额,然后取平均值作为同比增速。
阅读全文