gpt4 book ai didi

sql - 如何在具有空值的 Snowflake 中使用 `GREATEST()`?

转载 作者:行者123 更新时间:2023-12-05 09:26:04 26 4
gpt4 key购买 nike

我正在尝试在 Snowflake 中使用 GREATEST(),但每当我有空值时,我都会得到 null 而不是所需的结果:

select greatest(1,2,null);

-- null

这种行为让很多人感到困惑,它始于 Oracle 中 GREATEST() 的行为,Snowflake 与之匹配:

它也在 Snowflake 论坛中进行了讨论:

示例数据:

create or replace table some_nulls
as (
select $1 a, $2 b, $3 c
from values(1.1, 2.3, null::float), (null, 2, 3.5), (1, null, 3), (null, null, null)
);

select greatest(a, b)
from some_nulls;

enter image description here

在这里询问以获得最佳的可用解决方案。

最佳答案

可以使用 ARRAY 处理可为空的列:

SELECT a,b,c, GREATEST([a],[b],[c])[0]::INT
FROM some_nulls;

示例数据:

CREATE OR REPLACE TABLE some_nulls(a INT, b INT, c INT)
AS
SELECT 1, 2, NULL UNION
SELECT NULL, 2, 3 UNION
SELECT 1, NULL, 3 UNION
SELECT NULL, NULL, NULL;

输出:

enter image description here


工作原理:

NULL 变成了 [undefined] 这是最低的元素,因此这种方法可以用于 GREATEST 但不能用于 LEAST 函数。

编辑:根据 Denis'注释:-(GREATEST( [-a] ,[-b], [-c] )[0]::INT) 找到 LEAST

关于sql - 如何在具有空值的 Snowflake 中使用 `GREATEST()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74527418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com