本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
聚合扩展
AWS Clean Rooms 支持聚合扩展,以便在单个语句中执行多个 GROUP BY 操作。
GROUPING SETS
在单个语句中计算一个或多个分组集。分组集是单个 GROUP BY 子句的集合,这是一组 0 列或更多列,您可以通过这些列对查询的结果集进行分组。GROUP BY GROUPING SETS 等效于对一个按不同列分组的结果集运行 UNION ALL 查询。例如,GROUP BY GROUPING SETS((a), (b)) 等效于 GROUP BY a UNION ALL GROUP BY b。
以下示例返回按产品类别和所售产品类型分组的订单表产品的成本。
SELECT category, product, sum(cost) as total FROM orders GROUP BY GROUPING SETS(category, product); category | product | total ----------------------+----------------------+------- computers | | 2100 cellphones | | 1610 | laptop | 2050 | smartphone | 1610 | mouse | 50 (5 rows)
ROLLUP
假设在一个层次结构中,前面的列被视为后续列的父列。ROLLUP 按提供的列对数据进行分组,除了分组行之外,还返回额外的小计行,表示所有分组列级别的总计。例如,您可以使用 GROUP BY ROLLUP((a), (b)) 返回先按 a 分组的结果集,然后在假设 b 是 a 的一个子部分的情况下按 b 分组。ROLLUP 还会返回包含整个结果集而不包含分组列的行。
GROUP BY ROLLUP((a), (b)) 等效于 GROUP BY GROUPING SETS((a,b), (a), ())。
以下示例返回先按类别分组,然后按产品分组,且产品是类别细分项的订单表产品的成本。
SELECT category, product, sum(cost) as total FROM orders GROUP BY ROLLUP(category, product) ORDER BY 1,2; category | product | total ----------------------+----------------------+------- cellphones | smartphone | 1610 cellphones | | 1610 computers | laptop | 2050 computers | mouse | 50 computers | | 2100 | | 3710 (6 rows)
CUBE
按提供的列对数据进行分组,除了分组行之外,还返回额外的小计行,表示所有分组列级别的总计。CUBE 返回与 ROLLUP 相同的行,同时为 ROLLUP 未涵盖的每个分组列组合添加额外的小计行。例如,您可以使用 GROUP BY CUBE ((a), (b)) 返回先按 a 分组的结果集,然后在假设 b 是 a 的一个子部分的情况下按 b 分组,再然后是单独按 b 分组的结果集。CUBE 还会返回包含整个结果集而不包含分组列的行。
GROUP BY CUBE((a), (b)) 等效于 GROUP BY GROUPING SETS((a, b), (a), (b), ())。
以下示例返回先按类别分组,然后按产品分组,且产品是类别细分项的订单表产品的成本。与前面的 ROLLUP 示例不同,该语句返回每个分组列组合的结果。
SELECT category, product, sum(cost) as total FROM orders GROUP BY CUBE(category, product) ORDER BY 1,2; category | product | total ----------------------+----------------------+------- cellphones | smartphone | 1610 cellphones | | 1610 computers | laptop | 2050 computers | mouse | 50 computers | | 2100 | laptop | 2050 | mouse | 50 | smartphone | 1610 | | 3710 (9 rows)