Skip to content

Commit

Permalink
SQL: Fix SUM(all zeroes)
Browse files Browse the repository at this point in the history
Previously the SUM(all zeroes) was `NULL`, but after this change the SUM
SQL function call is automatically upgraded into a `stats` aggregation
instead of a `sum` aggregation. The `stats` aggregation only results in
`NULL` if the there were no rows, no values to aggregate, which is the
expected behaviour across different SQL implementations.

This is a workaround for elastic#45251 .
  • Loading branch information
Andras Palinkas committed Dec 3, 2020
1 parent 26350df commit d2ba958
Show file tree
Hide file tree
Showing 5 changed files with 544 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,359 @@

aggregatingAllZerosWithFirst
schema::FIRST_AllZeros:i
SELECT FIRST(bytes_in) as "FIRST_AllZeros" FROM logs WHERE bytes_in = 0;

FIRST_AllZeros
---------------
0
;


aggregatingAllNullsWithFirst
schema::FIRST_AllNulls:i
SELECT FIRST(bytes_out) as "FIRST_AllNulls" FROM logs WHERE bytes_out IS NULL;

FIRST_AllNulls
---------------
null
;


aggregatingAllZerosWithLast
schema::LAST_AllZeros:i
SELECT LAST(bytes_in) as "LAST_AllZeros" FROM logs WHERE bytes_in = 0;

LAST_AllZeros
---------------
0
;


aggregatingAllNullsWithLast
schema::LAST_AllNulls:i
SELECT LAST(bytes_out) as "LAST_AllNulls" FROM logs WHERE bytes_out IS NULL;

LAST_AllNulls
---------------
null
;


aggregatingAllZerosWithCount
schema::COUNT_AllZeros:l
SELECT COUNT(bytes_in) as "COUNT_AllZeros" FROM logs WHERE bytes_in = 0;

COUNT_AllZeros
---------------
2
;


aggregatingAllNullsWithCount
schema::COUNT_AllNulls:l
SELECT COUNT(bytes_out) as "COUNT_AllNulls" FROM logs WHERE bytes_out IS NULL;

COUNT_AllNulls
---------------
0
;


aggregatingAllZerosWithCountStar
schema::COUNT_AllZeros:l
SELECT COUNT(*) as "COUNT_AllZeros" FROM logs WHERE bytes_in = 0;

COUNT_AllZeros
---------------
2
;


aggregatingAllNullsWithCountStar
schema::COUNT_AllNulls:l
SELECT COUNT(*) as "COUNT_AllNulls" FROM logs WHERE bytes_out IS NULL;

COUNT_AllNulls
---------------
51
;


aggregatingAllZerosWithAvg
schema::AVG_AllZeros:d
SELECT AVG(bytes_in) as "AVG_AllZeros" FROM logs WHERE bytes_in = 0;

AVG_AllZeros
---------------
0.0
;


aggregatingAllNullsWithAvg
schema::AVG_AllNulls:d
SELECT AVG(bytes_out) as "AVG_AllNulls" FROM logs WHERE bytes_out IS NULL;

AVG_AllNulls
---------------
null
;


aggregatingAllZerosWithMin
schema::MIN_AllZeros:i
SELECT MIN(bytes_in) as "MIN_AllZeros" FROM logs WHERE bytes_in = 0;

MIN_AllZeros
---------------
0
;


aggregatingAllNullsWithMin
schema::MIN_AllNulls:i
SELECT MIN(bytes_out) as "MIN_AllNulls" FROM logs WHERE bytes_out IS NULL;

MIN_AllNulls
---------------
null
;


aggregatingAllZerosWithMax
schema::MAX_AllZeros:i
SELECT MAX(bytes_in) as "MAX_AllZeros" FROM logs WHERE bytes_in = 0;

MAX_AllZeros
---------------
0
;


aggregatingAllNullsWithMax
schema::MAX_AllNulls:i
SELECT MAX(bytes_out) as "MAX_AllNulls" FROM logs WHERE bytes_out IS NULL;

MAX_AllNulls
---------------
null
;


aggregatingAllZerosWithSum
schema::SUM_AllZeros:i
SELECT SUM(bytes_in) as "SUM_AllZeros" FROM logs WHERE bytes_in = 0;

SUM_AllZeros
---------------
0
;


aggregatingAllNullsWithSum
schema::SUM_AllNulls:i
SELECT SUM(bytes_out) as "SUM_AllNulls" FROM logs WHERE bytes_out IS NULL;

SUM_AllNulls
---------------
null
;


aggregatingAllZerosWithPercentile
schema::PERCENTILE_AllZeros:d
SELECT PERCENTILE(bytes_in, 0) as "PERCENTILE_AllZeros" FROM logs WHERE bytes_in = 0;

PERCENTILE_AllZeros
-------------------
0.0
;


aggregatingAllNullsWithPercentile
schema::PERCENTILE_AllNulls:d
SELECT PERCENTILE(bytes_out, 0) as "PERCENTILE_AllNulls" FROM logs WHERE bytes_out IS NULL;

PERCENTILE_AllNulls
-------------------
null
;


aggregatingAllZerosWithPercentileRank
schema::PERCENTILE_RANK_AllZeros:d
SELECT PERCENTILE_RANK(bytes_in, 0) as "PERCENTILE_RANK_AllZeros" FROM logs WHERE bytes_in = 0;

PERCENTILE_RANK_AllZeros
------------------------
100.0
;


aggregatingAllNullsWithPercentileRank
schema::PERCENTILE_RANK_AllNulls:d
SELECT PERCENTILE_RANK(bytes_out, 0) as "PERCENTILE_RANK_AllNulls" FROM logs WHERE bytes_out IS NULL;

PERCENTILE_RANK_AllNulls
------------------------
null
;


aggregatingAllZerosWithSumOfSquares
schema::SUM_OF_SQUARES_AllZeros:d
SELECT SUM_OF_SQUARES(bytes_in) as "SUM_OF_SQUARES_AllZeros" FROM logs WHERE bytes_in = 0;

SUM_OF_SQUARES_AllZeros
-----------------------
0.0
;


aggregatingAllNullsWithSumOfSquares
schema::SUM_OF_SQUARES_AllNulls:d
SELECT SUM_OF_SQUARES(bytes_out) as "SUM_OF_SQUARES_AllNulls" FROM logs WHERE bytes_out IS NULL;

SUM_OF_SQUARES_AllNulls
-----------------------
null
;


aggregatingAllZerosWithStddevPop
schema::STDDEV_POP_AllZeros:d
SELECT STDDEV_POP(bytes_in) as "STDDEV_POP_AllZeros" FROM logs WHERE bytes_in = 0;

STDDEV_POP_AllZeros
-------------------
0.0
;


aggregatingAllNullsWithStddevPop
schema::STDDEV_POP_AllNulls:d
SELECT STDDEV_POP(bytes_out) as "STDDEV_POP_AllNulls" FROM logs WHERE bytes_out IS NULL;

STDDEV_POP_AllNulls
-------------------
null
;


aggregatingAllZerosWithStddevSamp
schema::STDDEV_SAMP_AllZeros:d
SELECT STDDEV_SAMP(bytes_in) as "STDDEV_SAMP_AllZeros" FROM logs WHERE bytes_in = 0;

STDDEV_SAMP_AllZeros
--------------------
0.0
;


aggregatingAllNullsWithStddevSamp
schema::STDDEV_SAMP_AllNulls:d
SELECT STDDEV_SAMP(bytes_out) as "STDDEV_SAMP_AllNulls" FROM logs WHERE bytes_out IS NULL;

STDDEV_SAMP_AllNulls
--------------------
null
;


aggregatingAllZerosWithVarSamp
schema::VAR_SAMP_AllZeros:d
SELECT VAR_SAMP(bytes_in) as "VAR_SAMP_AllZeros" FROM logs WHERE bytes_in = 0;

VAR_SAMP_AllZeros
-----------------
0.0
;


aggregatingAllNullsWithVarSamp
schema::VAR_SAMP_AllNulls:d
SELECT VAR_SAMP(bytes_out) as "VAR_SAMP_AllNulls" FROM logs WHERE bytes_out IS NULL;

VAR_SAMP_AllNulls
-----------------
null
;


aggregatingAllZerosWithVarPop
schema::VAR_POP_AllZeros:d
SELECT VAR_POP(bytes_in) as "VAR_POP_AllZeros" FROM logs WHERE bytes_in = 0;

VAR_POP_AllZeros
----------------
0.0
;


aggregatingAllNullsWithVarPop
schema::VAR_POP_AllNulls:d
SELECT VAR_POP(bytes_out) as "VAR_POP_AllNulls" FROM logs WHERE bytes_out IS NULL;

VAR_POP_AllNulls
----------------
null
;


aggregatingAllZerosWithSkewness
schema::SKEWNESS_AllZeros:d
SELECT SKEWNESS(bytes_in) as "SKEWNESS_AllZeros" FROM logs WHERE bytes_in = 0;

SKEWNESS_AllZeros
-----------------
NaN
;


aggregatingAllNullsWithSkewness
schema::SKEWNESS_AllNulls:d
SELECT SKEWNESS(bytes_out) as "SKEWNESS_AllNulls" FROM logs WHERE bytes_out IS NULL;

SKEWNESS_AllNulls
-----------------
null
;


aggregatingAllZerosWithMad
schema::MAD_AllZeros:d
SELECT MAD(bytes_in) as "MAD_AllZeros" FROM logs WHERE bytes_in = 0;

MAD_AllZeros
---------------
0.0
;


aggregatingAllNullsWithMad
schema::MAD_AllNulls:d
SELECT MAD(bytes_out) as "MAD_AllNulls" FROM logs WHERE bytes_out IS NULL;

MAD_AllNulls
---------------
NaN
;


aggregatingAllZerosWithKurtosis
schema::KURTOSIS_AllZeros:d
SELECT KURTOSIS(bytes_in) as "KURTOSIS_AllZeros" FROM logs WHERE bytes_in = 0;

KURTOSIS_AllZeros
-----------------
NaN
;


aggregatingAllNullsWithKurtosis
schema::KURTOSIS_AllNulls:d
SELECT KURTOSIS(bytes_out) as "KURTOSIS_AllNulls" FROM logs WHERE bytes_out IS NULL;

KURTOSIS_AllNulls
-----------------
null
;
Loading

0 comments on commit d2ba958

Please sign in to comment.