我有一张这样的table
CREATE TABLE fake_sales
(
group_id INT NOT NULL,
year SMALLINT CHECK(year > 0),
amount DECIMAL(10, 2) NOT NULL,
PRIMARY KEY(year, group_id)
);
我想使用LAG
窗口函数比较今年的销售和去年的销售额。
就像这样:
SELECT
year,
SUM(amount) AS annual_sale,
LAG(annual_sale, 1) OVER (PARTITION BY year ORDER BY year) change_amount
FROM fake_sales
GROUP BY year;
但是我不能得到想要的结果,我得到了这个错误
您访问的页面不存在!
如何比较一个记录(行)与聚合列的前一个记录?
3条答案
按热度按时间dldeef671#
这是因为列
annual_sale
实际上不存在:不允许在lead中使用alias。您应该使用SUM(amount)
(或使用子查询)。你也不需要划分你的滞后。
小提琴here
rqqzpn5f2#
我建议先按年汇总,然后再考虑销售额的滞后。
9gm1akwq3#
您应该首先计算聚合的
SUM
列,然后使用LAG
计算差值。请参见演示here。