在 PostgreSQL 中,ROLLUP 是一种分组集合的操作,它可以计算多个级别的汇总信息
首先,我们创建一个名为 sales_data 的表,其中包含 product_id、region_id 和销售额:
CREATE TABLE sales_data (
product_id INT,
region_id INT,
sales NUMERIC(10, 2)
);
接下来,我们插入一些示例数据:
INSERT INTO sales_data (product_id, region_id, sales)
VALUES (1, 1, 100), (1, 2, 200), (2, 1, 300), (2, 2, 400);
现在,我们将使用 ROLLUP 在子查询中进行汇总计算。以下查询将按产品和地区对销售额进行分组,并在子查询中使用 ROLLUP 计算每个产品和地区的总销售额:
SELECT product_id, region_id, SUM(sales) as total_sales
FROM sales_data
GROUP BY ROLLUP(product_id, region_id)
ORDER BY product_id, region_id;
这将返回以下结果:
product_id | region_id | total_sales
------------+-----------+-------------
1 | 1 | 100
1 | 2 | 200
1 | | 300
2 | 1 | 300
2 | 2 | 400
2 | | 700
| | 1000
在这个例子中,我们可以看到每个产品和地区的销售额,以及每个产品和所有地区的总销售额。最后一行显示了所有产品和地区的总销售额。