Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

使用 OLAP

使用 GROUPING SETS


使用 GROUPING SETS,您可以在同一查询中对几组不同分组列上的组进行计算。尽管 CUBE 和 ROLLUP 会在结果集中添加一组预定义的小计,但使用 GROUPING SETS 可以显式指定要添加哪些小计。这比使用 ROLLUP 或 CUBE 更加复杂,但是却使您可以更好地控制结果集。如果只想返回 CUBE 的多维结果集的一部分,此操作很有用。使用 GROUPING SETS,您可以选择要比较的变量而不必像 CUBE 一样返回所有变量的比较或者像 ROLLUP 一样返回层次子集。

此 SQL 语法... 定义以下集合...
GROUP BY GROUPING SETS 
     ((A, B), (A, C), (C));
(A, B)

(A, C)

(C)

有关 GROUPING SETS 查询返回的行的详细信息,请参见关于 OLAP 操作。有关在查询中使用 GROUP BY 子句的详细信息,请参见 GROUP BY 子句

示例 

下面的示例说明了可以如何使用 GROUPING SETS 定制从查询返回的结果。查询指定结果集返回每年的小计行,但不返回各个季度的小计行。

SELECT year (order_date) AS Year, quarter (order_date) AS Quarter, COUNT (*) AS Orders 
FROM sales_order
GROUP BY GROUPING SETS ((Year, Quarter), (Year))
ORDER BY Year, Quarter

下面的表是查询的结果集。小计行会突出显示。

A result set from a GROUPING SETS query showing the subtotal rows for number of sales orders for each year.

结果集只包括每年(2000 和 2001)的小计行。请注意,它不提供两年和所有季度的订单数的总数之和。

如果使用 CUBE 运算符运行查询,您将获得所有订单、每个季度(1、2、3 和 4)和每年(2000 和 2001)的附加小计行。

了解 GROUPING SETS 

与 ROLLUP 相似,GROUPING SETS 操作等效于 GROUP BY 查询的 UNION ALL。

此 GROUPING SETS 查询... 等效于没有 GROUPING SETS 的此查询...
SELECT A, B, C, 
     SUM( D )
FROM t
GROUP BY GROUPING SETS 
     ( A, B, C )
SELECT * FROM (
 ( SELECT A, NULL, NULL, SUM( D )
FROM t GROUP BY A )
  UNION ALL
 ( SELECT NULL, B, NULL, SUM( D )
FROM t GROUP BY B )
  UNION ALL
 ( SELECT NULL, NULL, C, SUM( D )
FROM t GROUP BY C )
)

使用连接的 GROUPING SETS

Collection Contents 上一页 下一页 PDF