You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (Jira)" <ji...@apache.org> on 2023/06/27 01:37:00 UTC

[jira] [Created] (CALCITE-5802) In RelBuilder add method aggregateExtended, to allow aggregating complex expressions such as "1 + SUM(x + 2)"

Julian Hyde created CALCITE-5802:
------------------------------------

             Summary: In RelBuilder add method aggregateExtended, to allow aggregating complex expressions such as "1 + SUM(x + 2)"
                 Key: CALCITE-5802
                 URL: https://issues.apache.org/jira/browse/CALCITE-5802
             Project: Calcite
          Issue Type: Bug
            Reporter: Julian Hyde


In {{RelBuilder}} add method {{{}aggregateExtended{}}}, to allow aggregating complex expressions such as "1 + SUM(x + 2)". These expressions are difficult because there is an expression ({{{}x + 2{}}}) before the aggregate, then the aggregate, then an expression ({{{}1 + sum{}}}) after the aggregate. For complex expressions such as this, the translation requires a {{Project}} followed by an {{Aggregate}} followed by a {{{}Project{}}}.

Aggregate functions are not conventionally represented as {{{}RexNode{}}}, but we allow them in the expression passed to {{{}aggregateExtended{}}}.

For example, to create the same effect as SQL
{code:java}
SELECT deptno,
    deptno + 2 AS d2,
    3 + SUM(4 + sal) AS s
FROM emp
GROUP BY deptno
{code}
we use the {{RelBuilder}} code
{code:java}
RelBuilder b;
b.scan("EMP")
    .aggregateRex(b.groupKey(b.field("DEPTNO")),
        b.field("DEPTNO"),
        b.alias(
            b.call(SqlStdOperatorTable.PLUS, b.field("DEPTNO"),
                b.literal(2)),
            "d2"),
        b.alias(
            b.call(SqlStdOperatorTable.PLUS, b.literal(3),
                b.call(SqlStdOperatorTable.SUM,
                    b.call(SqlStdOperatorTable.PLUS, b.literal(4),
                        b.field("SAL")))),
            "s"))
    .build();
{code}
and the resulting relational expression is
{noformat}
LogicalProject(DEPTNO=[$0], d2=[+($0, 2)], s=[+(3, $1)])
  LogicalAggregate(group=[{0}], agg#0=[SUM($1)])
    LogicalProject(DEPTNO=[$7], $f8=[+(4, $5)])
      LogicalTableScan(table=[[scott, EMP]])
{noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)