This query returns a scalar aggregate:
select max(c11) from t1
The first step computes the scalar aggregate and stores it in an internal variable. The second step is empty, as it only returns the variable, in a step with nothing to optimize:
( plan ( t_scan t1 ) ( ) )
Vector aggregates are also two-step queries:
select max(c11) from t1 group by c12
The first step processes the aggregates into a worktable; the second step scans the worktable:
( plan ( store Worktab1 ( t_scan t1 ) ) ( t_scan ( work_t Worktab1 ) ) )
Nested aggregates are a Transact-SQL extension:
select max(count(*)) from t1 group by c11
The first step processes the vector aggregate into a worktable, the second scans it to process the nested scalar aggregate into an internal variable, and the third step returns the value.
( plan ( store Worktab1 ( i_scan i_c12 t1 ) ) ( t_scan ( work_t Worktab1 ) ) ( ) )
Extended columns in aggregate queries are a Transact-SQL extension:
select max(c11), c11 from t1 group by c12
The first step processes the vector aggregate; the second one joins it back to the base table to process the extended columns:
( plan ( store Worktab1 ( t_scan t1 ) ) ( g_join ( t_scan t1 ) ( i_scan i_c11 ( work_t Worktab1 ) ) ) )
This example contains an aggregate in a merged view:
create view v4 as select max(c11) as c41, c12 as c42 from t1 group by c12
select * from t2, v4 where c21 = 0 and c22 > c41
The first step processes the vector aggregate; the second joins it to the main query table:
( plan ( store Worktab1 ( t_scan ( table t1 ( in (view v4 ) ) ) ) ) ( g_join ( i_scan i_c22 t2 ) ( t_scan ( work_t Worktab1 ) ) ) )
This example includes an aggregate that is processed using a materialized view:
create view v5 as select distinct max(c11) as c51, c12 as c52 from t1 group by c12
select * from t2, v5 where c21 = 0 and c22 > c51
The first step processes the vector aggregate into a worktable. The second step scans it into a second worktable to process the materialized view. The third step joins this second worktable in the main query:
( plan ( store Worktab1 ( t_scan ( table t1 ( in (view v5 ) ) ) ) ) ( store Worktab2 ( t_scan ( work_t Worktab1 ) ) ) ( g_join ( i_scan i_c22 t2 ) ( t_scan ( work_t Worktab2 ) ) ) )