PostgreSQL 教程: CUBE

九月 23, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的CUBE生成多个分组集。

PostgreSQL CUBE 简介

PostgreSQL 的CUBEGROUP BY子句的子句。CUBE允许您生成多个分组集。

分组集是要分组的一组列。有关分组集的更多信息,请查看GROUPING SETS教程。

下面说明了CUBE子句的语法:

SELECT
    c1,
    c2,
    c3,
    aggregate (c4)
FROM
    table_name
GROUP BY
    CUBE (c1, c2, c3);

在这个语法中:

  • 首先,指定SELECT语句的GROUP BY子句中的CUBE子句。
  • 其次,在查询列表中指定要分析的列(维度或维度列)和聚合函数表达式。
  • 第三,在GROUP BY子句中,在CUBE子子句的括号内指定维度列。

该查询根据CUBE中指定的维度列生成所有可能的分组集。该CUBE子子句是定义多个分组集的简短方法,因此以下内容是等效的:

CUBE(c1,c2,c3) 

GROUPING SETS (
    (c1,c2,c3), 
    (c1,c2),
    (c1,c3),
    (c2,c3),
    (c1),
    (c2),
    (c3), 
    ()
 ) 

一般来说,如果CUBE中指定的列数为n,那么您将有 2n 种组合。

PostgreSQL 允许您执行部分多维数据集以减少计算的聚合数量。下面显示了语法:

SELECT
    c1,
    c2,
    c3,
    aggregate (c4)
FROM
    table_name
GROUP BY
    c1,
    CUBE (c1, c2);

PostgreSQL CUBE 示例

我们将使用GROUPING SETS教程中创建的sales表进行演示。

Sales Table

以下查询使用CUBE子子句生成多个分组集:

SELECT
    brand,
    segment,
    SUM (quantity)
FROM
    sales
GROUP BY
    CUBE (brand, segment)
ORDER BY
    brand,
    segment;

这是输出:

PostgreSQL CUBE example

以下查询执行生成部分多维数据集:

SELECT
    brand,
    segment,
    SUM (quantity)
FROM
    sales
GROUP BY
    brand,
    CUBE (segment)
ORDER BY
    brand,
    segment;

PostgreSQL CUBE - partial cube example

在本教程中,您学习了如何使用 PostgreSQL 的CUBE生成多个分组集。