2016-11-20 2 views
1

У меня есть проблема, когда я хочу объединить несколько столбцов в одно здание массива. Кроме того, я хочу сгруппировать по другому столбцу, чтобы построить добавление второго измерения в массив.PostgreSQL: Объединить числа и строки в массив

Вот текущая ситуация:

function   X  Y  Z 
A     1  4  {7,9,...} 
A     2  6  {8,3,...} 
A     4  4  {6,1,...} 
A     3  2  {1,0,...} 
B     1  2  {1,1,...} 

После объединения столбцов X, Y и Z в одну колонку:

function   XYZ 
A     {1,4,7,9,...} 
A     {2,6,8,3,...} 
A     {4,4,6,1,...} 
A     {3,2,1,0,...} 
B     {1,2,1,1,...} 

Хочу группы по функции столбца и построить 2 двумерный массив, как результат. Записи внутри массива должны быть упорядочены по столбцу X.

function   XYZ 
A     {{1,4,7,9,...},{2,6,8,3,...},{3,2,1,0,...},{4,4,6,1,...}}     
B     {{1,2,1,1,...}} 

Я знаю, что я могу использовать array_agg агрегировать над один столбец, чтобы положить записи в массив, но я не получил этот случай работать.

Благодарим за помощь.

ответ

1

Если я правильно понимаю

CREATE TABLE f (fn text,x int,y int,z int[]); 
INSERT INTO f(fn, x, y, z) values ('A',1,4,ARRAY[7,8,9]); 
INSERT INTO f(fn, x, y, z) values ('A',2,6,ARRAY[7,8,9]); 
INSERT INTO f(fn, x, y, z) values ('A',4,4,ARRAY[7,8,9]); 
INSERT INTO f(fn, x, y, z) values ('B',1,4,ARRAY[7,8,9]); 
INSERT INTO f(fn, x, y, z) values ('A',9,4,ARRAY[7,8,9]); 
INSERT INTO f(fn, x, y, z) values ('A',5,4,ARRAY[7,8,9]); 

SELECT fn,ARRAY_AGG(v) FROM 
(SELECT fn,ARRAY[x]||ARRAY[y]||z as v from f ORDER BY x) x GROUP BY fn; 
Смежные вопросы