如何使用 Coalesce 和 Max 提取不为空的最大值列

How can I use Coalesce and Max to extract maximum valued column which is not null

我有列 A, B, C and D,我想用 MAX(COLUMN_A, COLUMN_B)/MAX(COLUMN_C, COLUMN_D) 创建新的计算列。

这些列中的某些行也有 NULL 值,我如何在 Impala 或 SQL

中执行此操作

您可以使用 least()greatest() 来达到这个目的。忽略 NULL:

select greatest(a, b) / greatest(c, d)

问题是 NULL 值。我认为这些函数 return NULL 如果任何参数是 NULL。如果已知这些值为正,则可以将 NULL 替换为 0:

select greatest(coalesce(a, 0), coalesce(b, 0)) / greatest(coalesce(c, 0), coalesce(d, 0))

或者,对于两个值,您可以使用此构造:

select greatest(coalesce(a, b), coalesce(b, a)) / greatest(coalesce(c, d), coalesce(d, c))