计算postgresql中按月份汇总的年间销售额差异
我在PostgreSQL中有一个sales表,有两列:sales和date。例如,使用以下数据:计算postgresql中按月份汇总的年间销售额差异,postgresql,Postgresql,我在PostgreSQL中有一个sales表,有两列:sales和date。例如,使用以下数据: Date Sales 2017-02-05 600 2017-03-01 800 2018-01-10 300 2018-02-02 500 2018-02-03 300 2018-03-01 800 我需要计算不同年份之间的销售差异,按月汇总 结果应该是这样的: Month sales_2017 sales_2018 variance Jan
Date Sales
2017-02-05 600
2017-03-01 800
2018-01-10 300
2018-02-02 500
2018-02-03 300
2018-03-01 800
我需要计算不同年份之间的销售差异,按月汇总
结果应该是这样的:
Month sales_2017 sales_2018 variance
Jan null 300 300
Feb 600 800 200
Mar 800 800 0
要获得上述结果,查询应该是什么?
date\u部分
给出日期的月份号。这允许按月份分组,而不使用日期的年份SUM
使用特定筛选器(在本例中,筛选器为年份)计算值。这只允许聚合单个年份的值to_date
重新创建一个日期
类型,然后使用to_char
对其进行格式化)。“Mon”
格式化程序给出了三个字母的缩写方差
<代码>合并将空值转换为数字0
非常感谢!这正是我需要的!
SELECT
to_char(to_date(date_part::text, 'MM'), 'Mon') as month, -- 3
sales_2017,
sales_2018,
COALESCE(sales_2018, 0) - COALESCE(sales_2017, 0) as variance -- 4
FROM (
SELECT
date_part('month', sales_date), -- 1
SUM(sales) FILTER (WHERE date_part('year', sales_date) = 2017) as sales_2017, -- 2
SUM(sales) FILTER (WHERE date_part('year', sales_date) = 2018) as sales_2018
FROM
sales
GROUP BY 1 -- 1
)s
ORDER BY date_part