【问题标题】:Ignore null values in cloud spanner's aggregate functions忽略云扳手聚合函数中的空值
【发布时间】:2019-04-30 16:28:49
【问题描述】:

尝试使用函数ARRAY_AGG 并让它忽略空值,但文档没有提供任何相关信息。尝试使用扳手识别但不认为有效的“IGNORE NULLS”。

例子:

SELECT ARRAY_AGG(x IGNORE NULLS) FROM UNNEST([1,NULL,2,3]) x

抛出:IGNORE NULLS and RESPECT NULLS in aggregate functions are not supported

【问题讨论】:

    标签: google-cloud-platform google-cloud-spanner


    【解决方案1】:

    您仍然可以在聚合之前显式过滤掉空值:

      select array_agg(a) from unnest([1,2,3,cast(null as int64)])                                                      
      a where a is not null;
    

    将产生[1,2,3] 作为结果。

    【讨论】:

    • 不幸的是,这行不通。我的例子是一个简单的例子,过滤掉东西是有意义的,但对于我的用例,我需要在 JOIN 之后保留具有 0 行的记录。有 0 个连接行意味着该值为 null,如果我将它们过滤掉,我会过滤掉整行。
    • @SoufianeGhzal 也许this 解决方案适合您,因为您可以将 NULL 值替换为其他默认值,例如 -999: SELECT ARRAY_AGG(IFNULL(x,-999)) FROM UNNEST([ 1,NULL,2,3]) x
    【解决方案2】:

    如果您错过了它,Spanner 现在支持IGNORE NULLS 语句,如doc 中所述。

    ARRAY_AGG([DISTINCT] expression [{IGNORE|RESPECT} NULLS] [HAVING {MAX | MIN} expression2])
    

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 2016-10-20
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多