Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 数组\ postgres 9.5中不同长度的agg整数数组_Postgresql - Fatal编程技术网

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