Yaoxuan Wu created FLINK-40935:
----------------------------------

             Summary: 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
            Reporter: Yaoxuan Wu


{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