PotgreSQL 2D массив в строки - PullRequest
1 голос
/ 31 мая 2010

Я новичок в массивах PostgreSQL.

Я пытаюсь написать процедуру для преобразования массива в строки, и хотел следующий вывод:

alphabet | number
---------+----------
       A |      10
       B |      10
       C |       6
       D |       9
       E |       3



from following:


id |                                     alphabet_series                                                                                
-------+--------------------------------------------------------------------------------------------------
     1 | {{A,10},{B,10},{C,6},{D,9},{E,3},{F,9},{I,10},{J,17},{K,16},{L,17},{M,20},{N,13},{O,19}}

Я искал функции массива в строки, но все они, кажется, принимают 1-й массив. но в данном случае это 2-й массив.

Будут оценены любые указатели.

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 01 июня 2010
CREATE TABLE two_d (x text, y text);

CREATE OR REPLACE FUNCTION unnest_2d(anyarray)
  RETURNS SETOF two_d AS
$BODY$
  SELECT $1[i][1], $1[i][2] FROM
   generate_series(array_lower($1,1),
                    array_upper($1,1)) i
$BODY$
  LANGUAGE 'sql' IMMUTABLE;

SELECT * FROM unnest_2d('{{A,a},{B,b}}'::text[][]);
1 голос
/ 16 февраля 2017
CREATE OR REPLACE FUNCTION unnest_2d(anyarray)
  RETURNS table(col1 text, col2 text)  AS
$BODY$
DECLARE
  _col1 text[];
  _col2 text[];
BEGIN
  _col1 := $1[1:array_length($1, 1)][1:1];
  _col2 := $1[1:array_length($1, 1)][2:2];
  return query (SELECT * FROM unnest(_col1,_col2));
END
$BODY$  LANGUAGE plpgsql IMMUTABLE;

SELECT * FROM unnest_2d('{{A,a},{B,b}}'::text[][]);
0 голосов
/ 31 мая 2010

Я бы создал таблицу с 3 полями:

матрица CREATE TABLE ( ROW CHAR, COL INT, ЗНАЧЕНИЕ )

и заполните его своей матрицей тогда вы можете запросить его, используя:

ВЫБРАТЬ СТРОКУ, СУММУ (ЗНАЧЕНИЕ) ИЗ МАТРИЦЫ ГРУППЫ ПО КОЛОННЕ, ЗАКАЗАТЬ ПО СТРОКЕ;

или аналогичный.

Это будет хорошо работать, если матрица имеет разумный размер (например, не миллиарды элементов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...