如何用单条SQL语句为People表每列生成独立数组?
解决方案
1. 从单张People表生成嵌套数组结果
你可以通过将每列的array_agg结果包裹在外层数组中来实现需求。针对surname列的NULL值,用array_remove过滤掉它,就能得到目标格式:
SELECT ARRAY[array_agg(name), array_remove(array_agg(surname), NULL)] AS result FROM people;
执行后会返回嵌套数组结构,对应你期望的((Cell1, Cell2, Cell3), (Cell4, Cell5))格式(PostgreSQL中数组字符串表示为大括号,但实际结构是嵌套数组)。
2. 合并两张独立表的array_agg查询成单条语句
有两种实用方式实现:
方式一:子查询作为列
直接将两个表的聚合查询作为SELECT的列,既可以返回独立数组列,也可以组合成嵌套数组:
-- 返回两个独立数组列 SELECT (SELECT array_agg(name) FROM name) AS name_array, (SELECT array_agg(surname) FROM surname) AS surname_array;
-- 返回嵌套数组结果 SELECT ARRAY[ (SELECT array_agg(name) FROM name), (SELECT array_agg(surname) FROM surname) ] AS result;
方式二:交叉连接(CROSS JOIN)
将两个表的聚合结果作为临时表交叉连接(每个聚合查询仅返回一行,不会产生笛卡尔积),再组合成嵌套数组:
SELECT ARRAY[n.name_array, s.surname_array] AS result FROM (SELECT array_agg(name) AS name_array FROM name) n CROSS JOIN (SELECT array_agg(surname) AS surname_array FROM surname) s;
内容的提问来源于stack exchange,提问作者backed by
相关产品推荐
相关产品推荐

