使用空数组从 ARRAY_GET 获取 0 行

问题描述 投票:0回答:1

ARRAY_AGG
与空数组一起使用时,我可以过滤以获得空结果集吗?

尝试了各种查询:

DROP TABLE test IF EXISTS;
CREATE TABLE test (arr INT ARRAY);
SELECT ARRAY_AGG(arr) FROM test;
SELECT ARRAY_AGG(arr) FROM test WHERE arr IS NOT NULL;
SELECT ARRAY_AGG(arr) FILTER (WHERE arr IS NOT NULL) FROM test;
SELECT ARRAY_AGG(arr) FILTER (WHERE arr IS NOT NULL) FROM test WHERE arr IS NOT NULL;
SELECT ARRAY_AGG(arr) FROM test WHERE CARDINALITY(arr) > 0;
SELECT ARRAY_AGG(arr) FROM test WHERE NOT(ARRAY_CONTAINS(arr, NULL));

但全部返回 1 行且为 null,而我想要 0 行

null
(1 row, 0 ms)

我可能遗漏了一些明显的东西......

arrays h2
1个回答
0
投票

您使用了错误的过滤条款。如果您想从聚合查询中返回 0 行,可以使用

HAVING
子句来实现:

SELECT ARRAY_AGG(arr) FROM test HAVING COUNT(*) > 0;

但是如果你想得到一个空数组,你可以使用

COALESCE
:

SELECT COALESCE(ARRAY_AGG(arr), ARRAY[]) FROM test;
© www.soinside.com 2019 - 2024. All rights reserved.