📜  PostgreSQL – 分组集

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

PostgreSQL – 分组集

在 PostgreSQL 中,GROUPING SETS 用于生成与多个 GROUP BY 子句的 UNION ALL 生成的结果集等效的结果集。分组集是用户分组所依据的一组列。通常,单个聚合查询定义单个分组集。

GROUPING SETS语法 –

SELECT
    column1,
    column2,
    aggregate_function(column3)
FROM
    table_name
GROUP BY
    GROUPING SETS (
        (column1, column2),
        (ccolumn1),
        (column2),
        ()
);

为了更好地理解这个概念,让我们创建一个新表并继续示例。
要创建示例表,请使用以下命令:

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:
以下查询定义了 course_name 和段的分组集。它返回按品牌和细分市场销售的产品数量。

SELECT
    course_name,
    segment,
    SUM (quantity)
FROM
    geeksforgeeks_courses
GROUP BY
    course_name,
    segment;

输出:

示例 2:
course_name出售的课程数。它定义了course_name的分组集:

SELECT
    course_name,
    SUM (quantity)
FROM
    geeksforgeeks_courses
GROUP BY
    course_name;

输出:

示例 3:
以下查询查找按细分市场销售的产品数量。它定义了段的分组集:

SELECT
    segment,
    SUM (quantity)
FROM
    geeksforgeeks_courses
GROUP BY
    segment;

输出:

示例 4:
在以下查询中,我们将使用所有分组集的聚合生成单个结果集。

SELECT
    GROUPING(course_name) grouping_course,
    GROUPING(segment) grouping_segement,
    course_name,
    segment,
    SUM (quantity)
FROM
    geeksforgeeks_courses
GROUP BY
    GROUPING SETS (
        (course_name, segment),
        (course_name),
        (segment),
        ()
    )
ORDER BY
    course_name,
    segment;

输出: