将
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)
我可能遗漏了一些明显的东西......
您使用了错误的过滤条款。如果您想从聚合查询中返回 0 行,可以使用
HAVING
子句来实现:
SELECT ARRAY_AGG(arr) FROM test HAVING COUNT(*) > 0;
但是如果你想得到一个空数组,你可以使用
COALESCE
:
SELECT COALESCE(ARRAY_AGG(arr), ARRAY[]) FROM test;