PostgreSQL rollup与窗口函数结合

avatar
作者
猴君
阅读量:0

在 PostgreSQL 中,ROLLUP 和窗口函数可以结合使用,以便在一个查询中执行分组和汇总操作

首先,我们需要创建一个示例表:

CREATE TABLE sales (     id SERIAL PRIMARY KEY,     product_id INT,     store_id INT,     amount NUMERIC(10, 2),     sale_date DATE ); 

接下来,我们将插入一些示例数据:

INSERT INTO sales (product_id, store_id, amount, sale_date) VALUES (1, 1, 100.00, '2021-01-01'),        (1, 1, 200.00, '2021-01-02'),        (1, 2, 300.00, '2021-01-01'),        (2, 1, 400.00, '2021-01-01'),        (2, 2, 500.00, '2021-01-01'); 

现在,我们将使用 ROLLUP 和窗口函数计算每个商店的销售总额以及总销售总额。这是一个示例查询:

SELECT store_id, SUM(amount) AS total_sales,        SUM(SUM(amount)) OVER () AS grand_total_sales FROM sales GROUP BY ROLLUP (store_id) ORDER BY store_id; 

这个查询将返回以下结果:

 store_id | total_sales | grand_total_sales ----------+-------------+-------------------         1 |       700.00|            1900.00         2 |       800.00|            1900.00      NULL |      1900.00|            1900.00 

在这个查询中,我们首先使用 GROUP BY ROLLUP (store_id) 对商店进行分组。然后,我们使用 SUM(amount) 计算每个商店的销售总额。最后,我们使用窗口函数 SUM(SUM(amount)) OVER () 计算所有商店的总销售总额。注意,当 store_id 为 NULL 时,表示这是一个汇总行,包含所有商店的总销售总额。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!