【问题标题】:calculating percent change month over month in SQL在 SQL 中计算月度变化百分比
【发布时间】:2020-05-28 14:20:23
【问题描述】:

我想查询一张表以查找 2018 年 1 月至 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

非常感谢您的帮助!

【问题讨论】:

  • mom_change 第 1 个月的 charge_2018 和第 2 个月的 charge_2018 之间的百分比变化,例如?还是它基于charge_2019?还是两者兼而有之?
  • @marcothesane 我希望 mom_change 成为 2018 年第 1 个月和 2019 年第 1 个月的黑白增量。这有意义吗?谢谢!
  • 那将是那个月的同比增长,所以yoy_change

标签: sql-server subquery calculated-columns vertica


【解决方案1】:

然后是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多