忽略零和空的最少几列

minimum of several columns ignoring zero and null

在 TeraData 中,是否有一种简单的方法可以 select 多个列中的最小值(即创建计算列)同时忽略包含零和 NULL 的列?

有一个 LEAST 函数,但它不会忽略 NULL,因此您必须应用一些额外的逻辑,例如

LEAST(COALESCE(NULLIF(col1,0), 999999)
     ,COALESCE(NULLIF(col2,0), 999999)
     ,COALESCE(NULLIF(col3,0), 999999))

对于 99999,您应该使用比任何现有值都高的值。 如果所有列都可能为 NULL 或零,则必须添加 final

NULLIF(LEAST(....), 99999)

到 return 在这种情况下为 NULL。

嗯,你可以使用 least():

select least(col1, col2, col3)

这对 0s 和 NULLs 来说很棘手。您不指定列的类型,但可以使用 NULLIF()COALESCE() 表示正数值:

select least( coalesce(nullif(col1, 0), 999999999),
              coalesce(nullif(col2, 0), 999999999),
              coalesce(nullif(col2, 0), 999999999)
            )

当然,这个returns特殊值999999999如果所有值都是0NULL