忽略零和空的最少几列
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)
这对 0
s 和 NULL
s 来说很棘手。您不指定列的类型,但可以使用 NULLIF()
和 COALESCE()
表示正数值:
select least( coalesce(nullif(col1, 0), 999999999),
coalesce(nullif(col2, 0), 999999999),
coalesce(nullif(col2, 0), 999999999)
)
当然,这个returns特殊值999999999
如果所有值都是0
或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)
这对 0
s 和 NULL
s 来说很棘手。您不指定列的类型,但可以使用 NULLIF()
和 COALESCE()
表示正数值:
select least( coalesce(nullif(col1, 0), 999999999),
coalesce(nullif(col2, 0), 999999999),
coalesce(nullif(col2, 0), 999999999)
)
当然,这个returns特殊值999999999
如果所有值都是0
或NULL
。