Въпросът ви конкретно включва две колони, но попадах в ситуации, в които имах нужда от GREATEST
/LEAST
с повече от две колони. В тези сценарии можете да използвате COALESCE
и разширете решението до толкова колони, които искате.
Ето пример с три колони a
, b
и c
:
GREATEST(
COALESCE(a, b, c),
COALESCE(b, c, a),
COALESCE(c, a, b)
)
Обърнете внимание, че подреждането на колоните на COALESCE
промени, така че всяка входна колона да е първият елемент COALESCE
поне веднъж. Единственият път, когато това ще върне NULL, е когато всички входни колони са NULL.
В "общото решение" броят на COALESCE
изрази ще бъде равен на броя на входните колони:
GREATEST(
COALESCE(col1, col2, col3, col4, ....),
COALESCE(col2, col3, col4, ...., col1),
COALESCE(col3, col4, ...., col1, col2),
COALESCE(col4, ...., col1, col2, col3),
COALESCE(...., col1, col2, col3, col4),
...
)