📜  PostgreSQL – 滚动

📅  最后修改于: 2022-05-13 01:57:15.165000             🧑  作者: Mango

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;

输出: