计算SQL中的每月变化百分比

问题描述 投票:0回答:1

我想查询一张表以查找某商品的费用总和,该数字在2018年1月-5月的2019年至2019年5月之间。还可以建立一个子查询来计算各年之间总和的逐月变化。

这是我的查询现在的样子:

    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

非常感谢您的帮助!

sql-server subquery calculated-columns vertica
1个回答
0
投票

然后是这个:

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) AS yoy_charge
FROM sales_agg
GROUP BY 1
ORDER BY 1;
-- out Time: First fetch (0 rows): 0.402 ms. All rows formatted: 0.412 ms
-- out  mth | charge_2018 | charge_2019 | yoy_charge 
-- out -----+-------------+-------------+------------
-- out    1 |           5 |           7 |      1.400
-- out    2 |           7 |           8 |      1.143
-- out    3 |           7 |          10 |      1.429
-- out    4 |           6 |           8 |      1.333
-- out    5 |           5 |           6 |      1.200
© www.soinside.com 2019 - 2024. All rights reserved.