PostgreSQL – 滚动
PostgreSQL ROLLUP 属于 GROUP BY 子句,它提供了定义多个分组集的捷径。组合在一起的多个列形成一个组集。
与 CUBE 子条款不同,ROLLUP 不会基于指定的列生成所有可能的分组集。它只是其中的一个子集。 ROLLUP 预先假定输入列之间存在层次结构,并生成所有仅在考虑层次结构时才有意义的分组集。这就是为什么 ROLLUP 通常用于生成报表的小计和总计。
句法:
SELECT
column1,
column2,
column3,
aggregate(column4)
FROM
table_name
GROUP BY
ROLLUP (column1, column2, column3);
为了更好地理解这个概念,让我们创建一个新表并继续示例。
要创建示例表,请使用以下命令:
CREATE TABLE geeksforgeeks_courses(
course_name VARCHAR NOT NULL,
segment VARCHAR NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (course_name, segment)
);
现在使用以下命令向其中插入一些数据:
INSERT INTO geeksforgeeks_courses(course_name, segment, quantity)
VALUES
('Data Structure in Python', 'Premium', 100),
('Algorithm Design in Python', 'Basic', 200),
('Data Structure in Java', 'Premium', 100),
('Algorithm Design in Java', 'Basic', 300);
现在我们的表格已经设置好,让我们看看例子。
示例 1:
以下查询使用 ROLLUP 子句查找按 course_name(subtotal) 和所有 course_name 和段 (total) 销售的产品数量,如下所示:
SELECT
course_name,
segment,
SUM (quantity)
FROM
geeksforgeeks_courses
GROUP BY
ROLLUP (course_name, segment)
ORDER BY
course_name,
segment;
输出:
示例 2:
以下语句按如下方式执行部分 ROLL UP:
SELECT
segment,
course_name,
SUM (quantity)
FROM
geeksforgeeks_courses
GROUP BY
segment,
ROLLUP (course_name)
ORDER BY
segment,
course_name;
输出: