복붙노트

[SQL] 포스트 그레스 어레이에 데이터를 선택

SQL

포스트 그레스 어레이에 데이터를 선택

나는 다음과 같은 데이터를 가지고 :

name          id             url

John          1              someurl.com
Matt          2              cool.com
Sam           3              stackoverflow.com

어떻게 즉 다차원 배열에이 데이터를 선택하는 포스트 그레스의 SQL 문을 작성할 수 있습니다 :

{{John, 1, someurl.com}, {Matt, 2, cool.com}, {Sam, 3, stackoverflow.com}}

나는 포스트 그레스에서 전에 배열의 사용법의이 종류를 볼 수 있지만 방법이 배열 형식으로 테이블에서 데이터를 선택하는 아무 생각했습니다.

모든 열 유형의 텍스트의 것을 여기에 가정.

해결법

  1. ==============================

    1.당신은 적어도하지 최대 PostgreSQL의 9.4 다차원 배열을 생산하기 위해) (array_agg 사용할 수 없습니다. (그러나 곧 포스트 그레스 9.5 배를 array_agg의 새로운 변종 ()이 있습니다!)

    당신은 적어도하지 최대 PostgreSQL의 9.4 다차원 배열을 생산하기 위해) (array_agg 사용할 수 없습니다. (그러나 곧 포스트 그레스 9.5 배를 array_agg의 새로운 변종 ()이 있습니다!)

    당신이 @ 매트 볼의 쿼리의 나가하는 기록의 배열입니다 (the_table []).

    배열은 동일한 기본 유형의 요소를 보유 할 수있다. 당신은 분명히 숫자 및 문자열 유형이있다. 그것이 작동되도록 텍스트에 모든 열을 (이미가 아닌)을 변환합니다.

    내가 여기 전에 당신에게 보여처럼이에 대한 집계 함수를 만들 수 있습니다.

    CREATE AGGREGATE array_agg_mult (anyarray)  (
        SFUNC     = array_cat
       ,STYPE     = anyarray
       ,INITCOND  = '{}'
    );
    

    요구:

    SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
    FROM   tbl;
    

    그것을 다차원 배열 (2 차원 정밀 함)하도록 추가 ARRAY [] 층을 참고.

    인스턴트 데모 :

    WITH tbl(id, txt) AS (
        VALUES
          (1::int, 'foo'::text)
         ,(2,      'bar')
         ,(3,      '}b",') -- txt has meta-characters
        )
        , x AS (
        SELECT array_agg_mult(ARRAY[ARRAY[id::text,txt]]) AS t
        FROM   tbl
        )
    SELECT *, t[1][3] AS arr_element_1_1, t[3][4] AS arr_element_3_2
    FROM   x;
    
  2. ==============================

    2.당신은 집계 함수를 사용할 필요가; array_agg는 당신이 필요로해야한다.

    당신은 집계 함수를 사용할 필요가; array_agg는 당신이 필요로해야한다.

    SELECT array_agg(s) FROM (SELECT name, id, url FROM the_table ORDER BY id) AS s;
    
  3. from https://stackoverflow.com/questions/11762398/selecting-data-into-a-postgres-array by cc-by-sa and MIT license