Postgresql 数组\ postgres 9.5中不同长度的agg整数数组
我试图聚合长度不同的整数数组。使用空值填充,我正在尝试将其合并到我的查询中 以下是我的数据:Postgresql 数组\ postgres 9.5中不同长度的agg整数数组,postgresql,Postgresql,我试图聚合长度不同的整数数组。使用空值填充,我正在尝试将其合并到我的查询中 以下是我的数据: id | col -----+--------- 1 | {5,3} 1 | {6,4} 2 | {3} 2 | {2,3} 这是我想要的结果 id | col -----+--------- 1 | {{5,3},{6,4}} 2 | {{3,NULL},{2,3}} 看 这是我当前的查询,它按id聚合,但输出重复项。这是
id | col
-----+---------
1 | {5,3}
1 | {6,4}
2 | {3}
2 | {2,3}
这是我想要的结果
id | col
-----+---------
1 | {{5,3},{6,4}}
2 | {{3,NULL},{2,3}}
看
这是我当前的查询,它按id聚合,但输出重复项。这是我第一次使用LATERAL
功能,所以不知道这是否正确
SELECT
array_agg(
array_cat(
col,
array_fill(NULL::smallint, ARRAY[lat-COALESCE(array_length(col, 1),0)])
)
) AS result
,tab.id
FROM tab
,LATERAL (SELECT id,MAX(array_length(col,1)) AS lat
FROM tab GROUP BY id) s
GROUP BY tab.id
稍微不同的方法如何:
SELECT id, ARRAY_AGG(CASE WHEN ARRAY_LENGTH(col, 1) < max_length THEN (col || ARRAY_FILL(NULL::SMALLINT, ARRAY[max_length]))[1:max_length] ELSE col END) AS result
FROM tab, (SELECT MAX(ARRAY_LENGTH(col, 1)) AS max_length FROM tab) m
GROUP BY id
仅向数组中添加所需数量的空值
SELECT id, ARRAY_AGG(CASE WHEN ARRAY_LENGTH(col, 1) < max_length THEN col || ARRAY_FILL(NULL::SMALLINT, ARRAY[max_length - ARRAY_LENGTH(col, 1)]) ELSE col END) AS result
FROM tab, (SELECT MAX(ARRAY_LENGTH(col, 1)) AS max_length FROM tab) m
GROUP BY id