使用 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
下面的表是查询的结果集。小计行会突出显示。
结果集只包括每年(2000 和 2001)的小计行。请注意,它不提供两年和所有季度的订单数的总数之和。
如果使用 CUBE 运算符运行查询,您将获得所有订单、每个季度(1、2、3 和 4)和每年(2000 和 2001)的附加小计行。
与 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 ) ) |
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。