我想查询一张表以查找某商品的费用总和,该数字在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
非常感谢您的帮助!
然后是这个:
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