[
https://issues.apache.org/jira/browse/CALCITE-7362?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18061563#comment-18061563
]
Stamatis Zampetakis commented on CALCITE-7362:
----------------------------------------------
I updated the title and description to mention that the proposed transformation
rule will create filtered aggregates and not CASE WHEN expressions.
Since we are using filtered aggregates and not CASE WHEN expression we don't
need to restrict the transformation on functions that
[SqlAggFunction#skipNullInputs|https://github.com/apache/calcite/blob/c0d5a0832808fabfa32dea744415c0f46c516bce/core/src/main/java/org/apache/calcite/sql/SqlAggFunction.java#L233]
since we are not introducing any new null values. This allows the
transformation to be a bit more general than the original proposal.
> Add rule to transform WHERE clauses into filtered aggregates
> ------------------------------------------------------------
>
> Key: CALCITE-7362
> URL: https://issues.apache.org/jira/browse/CALCITE-7362
> Project: Calcite
> Issue Type: New Feature
> Components: core
> Reporter: Stamatis Zampetakis
> Assignee: Stamatis Zampetakis
> Priority: Major
>
> Add a rule to transform aggregate queries with filtering based on {{WHERE}}
> clauses to filtered aggregates {{AGG(col) FILTER (WHERE)}} without a
> {{WHERE}} clause.
> The proposed transformation using the SQL representation is shown below:
> +Before+
> {code:sql}
> select sum(ss_net_paid_inc_tax)
> from store_sales
> where ss_quantity < 20
> {code}
> +After+
> {code:sql}
> select sum(ss_net_paid_inc_tax) filter (where ss_quantity < 20)
> from store_sales; {code}
> The queries are equivalent and the transformation is valid for all aggregate
> functions.
> The transformation is correct only when there is *no* GROUP BY clause (or
> GROUP BY ()).
> The main motivation for introducing this rule is view-based rewriting where
> it is quite common to have multiple conditional aggregates in the same
> (materialized) view definition for precomputing and reusing expensive
> aggregations.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)