ROLLUP 操作提供集合行的小计。它使用 GROUP BY 子句在查询的结果集中添加小计行。ROLLUP 会生成一个结果集,显示所选列中的值的层次的集合。如果希望结果集显示总计和小计,请使用 ROLLUP 操作。
| 此 SQL 语法... | 定义以下集合... |
|---|---|
GROUP BY ROLLUP (A, B, C); |
(A, B, C)
(A, B) (A) ( ) |
有关 ROLLUP 查询返回的行的详细信息,请参见关于 OLAP 操作。有关在查询中使用 GROUP BY 子句的详细信息,请参见 GROUP BY 子句。
在下面的示例中,查询返回按年和季度汇总销售订单数的数据。
SELECT year (order_date) AS Year, quarter (order_date) AS Quarter, COUNT (*) AS Orders FROM sales_order GROUP BY ROLLUP (Year, Quarter) ORDER BY Year, Quarter
下面的表是查询的结果集。在结果集中突出显示小计行。每一小计行在计算小计的列中的值为 NULL。
标有 [1] 的行表示两年(2000、2001)和所有季度的订单总数。该行在 Year 列和 Quarter 列中的值均为 NULL,是所有列均未包括在前缀中的行。
注意每个 ROLLUP 操作均返回的结果集中均具有这样一行:除集合列外,每个列中均显示 NULL。该行表示对执行集合函数的每一列的汇总。例如,如果 SUM 是正在讨论的集合函数,则该行将表示所有值的总数之和。 |
突出显示行 [2] 的行分别表示 2000 年和 2001 年的订单总数。这两个行的 Quarter 列中均为 NULL,因为该列中的值会累计,为 Year 提供小计。
注意结果集中这种行的数目取决于 ROLLUP 查询中出现的变量数。 |
标有 [3] 的其余行通过提供两年内每个季度的订单总数提供了摘要信息。
下面是 ROLLUP 操作的另一个示例,与第一个示例相比,它返回的结果集略微复杂一些。结果集按年、季度和区域汇总了销售订单数。在此示例中,只检查第一和第二季度和两个选定区域(加拿大和东部地区)。
SELECT year (order_date) AS Year, quarter (order_date) AS Quarter, region, COUNT (*) AS Orders
FROM sales_order
WHERE region IN ('Canada', 'Eastern') AND quarter IN ('1', '2')
GROUP BY ROLLUP (Year, Quarter, Region)
ORDER BY Year, Quarter, Region下面的表是查询的结果集。每一小计行在计算小计的列中的值为 NULL。
第一行 [1] 是所有行的集合,在 Year、Quarter 和 Region 列中为 NULL。该行的 Orders 列中的值表示 2000 年和 2001 年的第 1 和第 2 季度在加拿大和东部地区的订单总数。
标有 [2] 的行表示每年(2000 年 和 2001 年)的第 1 和第 2 季度在加拿大和东部地区的销售订单总数。这些行 [2] 的值等于行 [1] 中呈现的总数。
标有 [3] 的行按区域提供有关给定年份和季度的订单总数的数据。
标有 [4] 的行在结果集中提供了有关每年、每季度和每个区域的订单总数的数据。
ROLLUP 等效于一组 GROUP BY 查询的 UNION。以下查询的结果集是相同的。GROUP BY A, B 的结果集包括所有那些 A 和 B 保持不变的行的小计。要实现联合,可为列 C 指派 NULL。
| 此 ROLLUP 查询... | 等效于没有 ROLLUP 的此查询... |
|---|---|
SELECT A, B, C,
SUM( D )
FROM T1
GROUP BY ROLLUP
(A, B, C);
|
SELECT * FROM ( ( SELECT A, B, C, SUM( D ) GROUP BY A, B, C ) UNION ALL ( SELECT A, B, NULL, SUM( D ) GROUP BY A, B ) UNION ALL ( SELECT A, NULL, NULL, SUM( D ) GROUP BY A ) UNION ALL ( SELECT NULL, NULL, NULL, SUM( D ) ) ) |
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。