[
https://issues.apache.org/jira/browse/CALCITE-7192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18022545#comment-18022545
]
Alessandro Solimando commented on CALCITE-7192:
-----------------------------------------------
I have added you to the project contributor list [~lincoln.86xy].
[~jensen] I have added you to the "committer" role, not sure it's enough to
handle user privileges but you can try, in case you face this issue in the
future and you can't fix it, feel free to message in the ML and someone will
help out
> AggregateReduceFunctionsRule lost FILTER condition in STDDEV/VAR function
> decomposition
> ---------------------------------------------------------------------------------------
>
> Key: CALCITE-7192
> URL: https://issues.apache.org/jira/browse/CALCITE-7192
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.40.0
> Reporter: lincoln lee
> Assignee: lincoln lee
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.41.0
>
>
> The `AggregateReduceFunctionsRule` has a bug when decomposing aggregate
> functions with FILTER conditions. When reducing variance and standard
> deviation functions (STDDEV_POP, STDDEV_SAMP, VAR_POP, VAR_SAMP), the rule
> fails to properly propagate the FILTER condition to all decomposed aggregate
> calls.
> *Root Cause*
> In the `reduceStddev` method, the `SUM(x * x)` aggregate call is created
> without applying the original FILTER condition:
> {code:java}
> // Line 554-555: Bug - passing -1 instead of oldCall.filterArg
> final AggregateCall sumArgSquaredAggCall =
> createAggregateCallWithBinding(typeFactory, SqlStdOperatorTable.SUM,
> argSquared.getType(), oldAggRel, oldCall, argSquaredOrdinal, -1);
> {code}
> While `SUM` and `COUNT` correctly use `oldCall.filterArg`, the `SUM(x * x)`
> call ignores the filter condition.
> *Impact*
> This affects all functions that use the `reduceStddev` method:
> *STDDEV_POP FILTER (WHERE condition)*
> *STDDEV_SAMP FILTER (WHERE condition)*
> *VAR_POP FILTER (WHERE condition)*
> *VAR_SAMP FILTER (WHERE condition)*
> Example
> {code:java}
> SELECT STDDEV_POP(salary) FILTER (WHERE salary > 1000) FROM employees{code}
> Before fix:
> `SUM(salary)` applies filter → only salaries > 1000
> `COUNT(salary)` applies filter → only count salaries > 1000
> `SUM(salary * salary)` *ignores filter* → includes ALL salaries (incorrect)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)