本节在说明和示例中使用 GROUP BY 子句的 ROLLUP 从属子句。
假设有一个以下形式的单表查询:
SELECT select-list FROM table WHERE where-search-condition GROUP BY [ group-by-expression | ROLLUP (group-by-expression) ] HAVING having-search-condition
该查询的执行方式如下:
应用 WHERE 子句 这就生成只包含该表的某些行的中间结果。
将结果划分为若干个组 此操作按 GROUP BY 子句的要求生成一个中间结果,结果中的每一行对应一组。生成的每一行都包含对应于一个组的 group-by-expression,并包含 select-list 和 having-search-condition 中已计算完的集合函数。
应用 HAVING 子句 此时,此第二个中间结果中的不满足 HAVING 子句条件的所有行都将被删除。
将结果投影到显示屏中 此操作只从第 3 步获取需要在查询的结果集中显示的那些列,也就是说,它只获取与 select-list 中的表达式相对应的那些列。
此过程对带有 GROUP BY 子句的查询有如下要求:
首先计算 WHERE 子句。因此,将只对满足 WHERE 子句条件的那些行计算集合函数。
最终结果集是根据第二个中间结果(保存已划分的行)建立的。第二个中间结果保留与 group-by-expression 相对应的那些行。因此,如果一个非集合函数的表达式出现在 select-list 中,则该表达式也必须出现在 group-by-expression 中。在投影步骤中无法执行函数计算。
可以在 group-by-expression 中包含表达式,但不能在 select-list 中包含表达式。它被投影到结果之外。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |