使用PostgreSQL计算销售额同比增长率:基于Superstore数据集实操问题
销售额同比增长率计算方案
现有代码问题修正
你当前编写的代码存在一处语法错误:SUM(sales) AS total_sales 后多了多余的逗号,会直接导致查询报错,删除该逗号即可完成基础的年度销售额统计。
同比增长率完整实现
计算销售额同比增长率可使用SQL窗口函数LAG()获取上一年的销售额数据,再套用通用同比公式计算即可,同比计算逻辑为:(当年销售额 - 上年销售额) / 上年销售额 * 100
完整查询代码如下:
SELECT order_year, total_sales, last_year_sales, -- 计算同比增长率,保留2位小数,通过NULLIF避免上年销售额为0时的除以0报错 ROUND( (total_sales - last_year_sales) / NULLIF(last_year_sales, 0) * 100, 2 ) AS sales_yoy_growth_pct FROM ( -- 内层子查询先统计每年的总销售额,同时获取上一年销售额 SELECT EXTRACT(year FROM order_date) AS order_year, SUM(sales) AS total_sales, LAG(SUM(sales)) OVER (ORDER BY EXTRACT(year FROM order_date)) AS last_year_sales FROM orders -- 若需要统计2019年全年数据,可将结束日期调整为DATE '2019-12-31' WHERE order_date BETWEEN DATE '2016-01-01' AND DATE '2019-12-01' GROUP BY EXTRACT(year FROM order_date) ORDER BY order_year ) AS annual_sales_stats;
代码说明
- 返回字段
sales_yoy_growth_pct为同比增长率百分比,例如返回值为12.34即代表当年销售额较上年增长12.34% - 如果需要计算月度同比,只需将聚合维度调整为「年份+月份」,窗口函数的排序逻辑也对应修改为按年月排序即可
内容的提问来源于stack exchange,提问作者Oliver S
相关产品推荐
相关产品推荐

