[ 
https://issues.apache.org/jira/browse/FLINK-40935?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yaoxuan Wu updated FLINK-40935:
-------------------------------
    Affects Version/s: 2.4.0

> VAR_SAMP / STDDEV_SAMP return -1 for a group with a single row
> --------------------------------------------------------------
>
>                 Key: FLINK-40935
>                 URL: https://issues.apache.org/jira/browse/FLINK-40935
>             Project: Flink
>          Issue Type: Bug
>          Components: Table SQL / Planner
>    Affects Versions: 2.3.0, 2.4.0
>            Reporter: Yaoxuan Wu
>            Priority: Major
>
> {code:java}
> SELECT k, VAR_SAMP(c), STDDEV_SAMP(c) FROM (VALUES (1, 10), (2, 20)) AS v(k, 
> c) GROUP BY k;
> -- Flink: (1, -1, -1), (2, -1, -1)      expected: (1, NULL, NULL), (2, NULL, 
> NULL)
> SELECT VAR_SAMP(c) FROM (VALUES (10)) AS v(c);
> -- NULL (correct, no GROUP BY)
> SELECT k, VAR_SAMP(c) FROM (VALUES (1, CAST(NULL AS INT)), (1, 10)) AS v(k, 
> c) GROUP BY k;
> -- NULL (correct, nullable input) {code}
> The sample variance of a single value is NULL, and a variance can never be 
> negative. With GROUP BY and a NOT NULL input, the result type is inferred as 
> {{{}INT NOT NULL{}}}, although the value is NULL for a group with one row:
> {code:java}
> SELECT VAR_SAMP(c) AS r FROM (VALUES (1, 10)) AS v(k, c) GROUP BY k   -- r: 
> INT NOT NULL, returns -1
> SELECT VAR_SAMP(c) AS r FROM (VALUES (10)) AS v(c)                    -- r: 
> INT,          returns NULL {code}
> The optimized plan computes CAST(/($f1, CASE(=($f2, 1), null:BIGINT, -($f2, 
> 1))) AS INTEGER), so the NULL produced by the CASE is lost and -1 (the 
> default value of a non-nullable INT) is returned. DOUBLE inputs return -1.0. 
> Batch and streaming mode behave the same.



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

Reply via email to