簡體   English   中英

SQL 中的嵌套最大 function

[英]Nested Max function in SQL

我想在 bigquery 中嵌套最大函數。

樣本-

最大值(a,最大值(b,最大值(c,d)))

它給出了無效 arguments 的錯誤。 所以,我嘗試的是最偉大的 function

最大(a,b,c,d)。 但是最大的 function 的問題是,如果任何值是 null,它將返回 null。 但我想要的是,即使任何值是 null,它也應該返回最大的值。

例如-

Greatest(1,3,4,null) - 它應該返回 4

最大(null,null,null)- 它應該返回 null

您可以將COALESCE()GREATEST() ) 一起使用:

SELECT GREATEST(
    COALESCE(a, b, c, d),
    COALESCE(b, a, c, d),
    COALESCE(c, a, b, d),
    COALESCE(d, a, b, c))
FROM yourTable;

上述邏輯的行為使得傳遞給GREATEST()的四個值中的每一個“推遲”到某個其他值,如果它是NULL 這樣,在所有四個輸入同時為 null 的情況下,對GREATEST()的調用只會返回NULL

您可以考慮以下標量子查詢,因為MAX聚合 function

返回非 NULL 表達式的最大值。 如果輸入行為零或表達式對所有行計算為 NULL,則返回 NULL。 如果輸入包含 NaN,則返回 NaN。

WITH sample_data AS (
  SELECT 1 a, 3 b, 4 c, null d UNION ALL
  SELECT null, null, null, null
)
SELECT (SELECT MAX(n) FROM UNNEST([a, b, c, d]) n) AS max FROM sample_data; 

在此處輸入圖像描述

下面的方法怎么樣?

create temp function maxx(x array<int64>)
returns float64 language js as r"""
  return Math.max.apply(null, x);
""";
select *, maxx([a,b,c,d]) as max_value
from your_table           

與 output 如下

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM