9.3、CUBE 分组

1、CUBE 

是 GROUP BY 子句的一个扩展,用于生成一个结果集,该结果集显示了所选列中所有可能的 组合 的聚合(以及总计)。

  • 它本质上是 ROLLUP 的超集,能生成更全面的分组集合。
  • 为指定的列生成所有可能的分组组合,包括小计和总计。
SELECT col1, col2, ..., aggregate_function(col)
FROM table_name
GROUP BY CUBE (col1, col2, ..., colN);

如:有两列:A 和 B。GROUP BY CUBE (A, B) 会生成以下所有分组组合:

  1. (A, B) - 按 A 和 B 的每个唯一组合进行分组。

  2. (A) - 仅按 A 进行分组(对 B 维度进行汇总)。

  3. (B) - 仅按 B 进行分组(对 A 维度进行汇总)。

  4. () - 对所有行进行总计(对 A 和 B 两个维度都进行汇总)。

分组组合的数量是 2n其中 n 是 CUBE 中的列数。对于 2 列,是 4 种组合;对于 3 列,是 8 种组合。

sales

regionproductamount
North Apple 100
North Banana 200
South Apple 150
South Banana 250

查询语句:

SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY CUBE(region, product);

结果(共 2² = 4 种分组 + 原始数据行):

regionproducttotal
North Apple 100
North Banana 200
South Apple 150
South Banana 250
North NULL 300
South NULL 400
NULL Apple 250
NULL Banana 450
NULL NULL 700

注意:CUBE(region, product) 包含了:

  • (region, product)
  • (region)
  • (product)
  • ()

ROLLUP(region, product) 只包含前三种中的 (region, product) → (region) → (),不会单独按 product 汇总。

posted @ 2025-11-19 14:59  chao_xiong  阅读(4)  评论(0)    收藏  举报