расчет процентного изменения месяца по сравнению с месяцем в SQL - PullRequest
0 голосов
/ 28 мая 2020

Я хочу запросить одну таблицу, чтобы найти сумму затрат на товар за период с января по май 2018-2019 гг. Я знаю, как условно суммировать, чтобы разбить расходы по годам, но я не уверен как также создать подзапрос для расчета месячных изменений сумм между годами.

вот как теперь выглядит мой запрос:

    SELECT
    "Month Bought" AS MONTH,
    SUM(
        CASE
            WHEN "Bought Year" = '2018'
            THEN "total charges"
            ELSE 0
        END) AS Charge_2018,
    SUM(
        CASE
            WHEN "Bought Year" = '2019'
            THEN "total charges"
            ELSE 0
        END) AS Charge_2019
FROM
    Sales_agg
WHERE
    "Month Bought" IS NOT NULL
AND "Month Bought" between '1' and '5'
GROUP BY
    "Month Bought"
ORDER BY
    "Month Bought";

вот как теперь выглядит результат :

Month | Charge_2018 | Charge_ 2019
1            5             7
2            7             8
3            7             10
4            6             8
5            5             6 

вот как я хотел бы, чтобы результат выглядел:

Month | Charge_2018 | Charge_ 2019 | Mom_Change
1            5             7            0.XX
2            7             8            0.XX
3            7             10           0.XX
4            6             8            0.XX
5            5             6            0.XX

большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 28 мая 2020

Тогда это:

WITH
sales_agg(yr,mth,charge) AS (
          SELECT 2018,  1, 5 
UNION ALL SELECT 2018,  2, 7 
UNION ALL SELECT 2018,  3, 7 
UNION ALL SELECT 2018,  4, 6 
UNION ALL SELECT 2018,  5, 5 
UNION ALL SELECT 2019,  1, 7
UNION ALL SELECT 2019,  2, 8
UNION ALL SELECT 2019,  3,10
UNION ALL SELECT 2019,  4, 8
UNION ALL SELECT 2019,  5, 6 
)
SELECT
  mth
, SUM(CASE yr WHEN 2018 THEN charge END) AS charge_2018
, SUM(CASE yr WHEN 2019 THEN charge END) AS charge_2019
, ( 
    SUM(CASE yr WHEN 2019 THEN charge END) 
  / SUM(CASE yr WHEN 2018 THEN charge END)
  )::NUMERIC(5,3) - 1 AS yoy_change
FROM sales_agg
GROUP BY 1
ORDER BY 1;
-- out Time: First fetch (0 rows): 0.565 ms. All rows formatted: 0.580 ms
-- out  mth | charge_2018 | charge_2019 | yoy_change 
-- out -----+-------------+-------------+------------
-- out    1 |           5 |           7 |      0.400
-- out    2 |           7 |           8 |      0.143
-- out    3 |           7 |          10 |      0.429
-- out    4 |           6 |           8 |      0.333
-- out    5 |           5 |           6 |      0.200
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...