Answered by aaaaaaaaaaaaaaaaa

WITH yearly_sales AS (
  SELECT 
    SUM(sales) AS total_sales, 
    yr
  FROM (
    SELECT
      sales,
      EXTRACT(YEAR FROM order_date) AS yr
    FROM stores_ma
  ) a
  GROUP BY yr
) 

SELECT 
  cur_year.yr, 
  (cur_year.total_sales - prev_year.total_sales) AS diff
FROM yearly_sales AS cur_year
LEFT JOIN yearly_sales AS prev_year ON prev_year.yr = cur_year.yr - 1
ORDER BY cur_year.yr ASC;

Answered by anonymousUser

WITH yearly_sales AS (
  SELECT 
    SUM(sales) AS total_sales, 
    yr
  FROM (
    SELECT
      sales,
      EXTRACT(YEAR FROM order_date) AS yr
    FROM stores_ma
  ) a
  GROUP BY yr
) 

SELECT 
  cur_year.yr, 
  (cur_year.total_sales - prev_year.total_sales) AS diff
FROM yearly_sales AS cur_year
LEFT JOIN yearly_sales AS prev_year ON prev_year.yr = cur_year.yr - 1
ORDER BY cur_year.yr ASC;

Answered by jrz1977

with yr_sales  as (
  select extract(YEAR from order_date) as yr, 
	sum(sales) total_sales from stores_ma
    group by 1 order by yr
)
select yr, total_sales, 
total_sales - lag(total_sales) over (order by yr) as diff,
round(
  100 * (total_sales - lag(total_sales) over (order by yr)) / lag(total_sales) over (order by yr)
, 2)  as pct
from
 yr_sales a;