You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ARRAY_AGG处理NULL数组时,如何获取空结果集?

解决ARRAY_AGG返回NULL行而非空结果集的问题

问题原因

所有聚合函数(包括ARRAY_AGG)的标准行为是:当没有任何行参与聚合时,会返回一行NULL值,而不是空结果集。你的test表是空表,或者所有查询的过滤条件都没匹配到任何行,所以不管怎么组合WHERE/FILTER,ARRAY_AGG都会输出一行NULL。

解决方法

在聚合查询后添加HAVING COUNT(*) > 0子句,只有当存在至少一行参与聚合时,才返回结果。这样没有匹配行时,就会返回0行的空结果集。

修改后的查询示例:

  • 原查询:SELECT ARRAY_AGG(arr) FROM test;
    修改后:

    SELECT ARRAY_AGG(arr) FROM test
    HAVING COUNT(*) > 0;
    
  • 原查询:SELECT ARRAY_AGG(arr) FROM test WHERE arr IS NOT NULL;
    修改后:

    SELECT ARRAY_AGG(arr) FROM test
    WHERE arr IS NOT NULL
    HAVING COUNT(*) > 0;
    
  • 原查询:SELECT ARRAY_AGG(arr) FILTER (WHERE arr IS NOT NULL) FROM test;
    修改后:

    SELECT ARRAY_AGG(arr) FILTER (WHERE arr IS NOT NULL) FROM test
    HAVING COUNT(arr) > 0; -- 用COUNT(arr)更准确,仅统计非NULL的arr行
    

原理说明

HAVING子句在聚合操作完成后对结果集过滤:

  • 当有行参与聚合时,COUNT(*) > 0为真,返回聚合结果;
  • 当没有行参与聚合时,COUNT(*) > 0为假,整个查询返回空结果集,不会输出那行NULL。

内容的提问来源于stack exchange,提问作者Marc Grue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:52:48