Function table / Numbers / GREATESTPROPAGATENULL

GREATESTPROPAGATENULL: from Tableau to SQL

Returns the greatest argument, or null if any argument is null. Below, 8 sample rows go through the calculation and through the SQL, and both return the same numbers.

Calculated field

GREATESTPROPAGATENULL([amount], [other])

Sample data

idamountunitsscoreother
1-2.52-0.83
20004
31.530.252
4440.58
5950.811
6166114
7null7null9
848-0.5null

The same calculation as SQL

SELECT CASE WHEN amount IS NULL OR other IS NULL THEN NULL ELSE greatest(amount,other) END AS result FROM input ORDER BY id

Runs the example above.

Result

idamountunitsscoreresult
1-2.52-0.83
20004
31.530.252
4440.58
5950.811
6166116
7null7nullnull
848-0.5null

Same rows from the calculation and from the SQL in DuckDB.

Where a naive translation goes wrong

  • DuckDB ordinary extrema skip null rather than propagating it.

    Naive SQL

    SELECT greatest(amount,other) AS result FROM input ORDER BY id
    idamountunitsscoreresult
    1-2.52-0.83
    20004
    31.530.252
    4440.58
    5950.811
    6166116
    7null7null9
    848-0.54

    Matches the calculation

    SELECT CASE WHEN amount IS NULL OR other IS NULL THEN NULL ELSE greatest(amount,other) END AS result FROM input ORDER BY id
    idamountunitsscoreresult
    1-2.52-0.83
    20004
    31.530.252
    4440.58
    5950.811
    6166116
    7null7nullnull
    848-0.5null

Signature

GREATESTPROPAGATENULL(number, number, ...)