복붙노트

[SQL] PostgreSQL을 GROUP_CONCAT 동등한?

SQL

PostgreSQL을 GROUP_CONCAT 동등한?

나는 테이블을 가지고 있고 나는 연결된 필드 값과 ID 당 하나 개의 행을 끌어 싶습니다.

내 표에서, 예를 들어,이 있습니다 :

TM67 | 4  | 32556
TM67 | 9  | 98200
TM67 | 72 | 22300
TM99 | 2  | 23009
TM99 | 3  | 11200

그리고 출력하고 싶습니다 :

TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3    | 23009,11200

MySQL의에서 나는 집계 함수 GROUP_CONCAT를 사용 할 수 있었다,하지만 여기에 작동하지 않는 것 ... PostgreSQL를위한 동등, 또는 이러한 목표를 달성하는 또 다른 방법이 있나요?

해결법

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

    1.이것은 아마도 좋은 시작점 (버전 8.4+ 만)입니다 :

    이것은 아마도 좋은 시작점 (버전 8.4+ 만)입니다 :

    SELECT id_field, array_agg(value_field1), array_agg(value_field2)
    FROM data_table
    GROUP BY id_field
    

    array_agg는 배열을 반환합니다,하지만 당신은 텍스트 편집 필요에 따라 (아래, 해명 참조) 것을 CAST 수 있습니다.

    버전 8.4 이전에는 사용하기 전에 스스로를 정의 할 수 있습니다 :

    CREATE AGGREGATE array_agg (anyelement)
    (
        sfunc = array_append,
        stype = anyarray,
        initcond = '{}'
    );
    

    (PostgreSQL의 문서에서 의역)

    추가 설명 :

  2. ==============================

    2.9.0 이후이 더 쉽게입니다 :

    9.0 이후이 더 쉽게입니다 :

    SELECT id, 
           string_agg(some_column, ',')
    FROM the_table
    GROUP BY id
    
  3. ==============================

    3.

    SELECT array_to_string(array(SELECT a FROM b),', ');
    

    뿐만 아니라 할 것입니다.

  4. ==============================

    4.이 같은 시도 :

    이 같은 시도 :

    select field1, array_to_string(array_agg(field2), ',')
    from table1
    group by field1;
    
  5. ==============================

    5.그리고 버전은 배열 형식에서 작동합니다 :

    그리고 버전은 배열 형식에서 작동합니다 :

    select
      array_to_string(
        array(select distinct unnest(zip_codes) from table),
        ', '
    );
    
  6. ==============================

    6.PostgreSQL의에서 나의 제안

    PostgreSQL의에서 나의 제안

    SELECT cpf || ';' || nome || ';' || telefone  
    FROM (
          SELECT cpf
                ,nome
                ,STRING_AGG(CONCAT_WS( ';' , DDD_1, TELEFONE_1),';') AS telefone 
          FROM (
                SELECT DISTINCT * 
                FROM temp_bd 
                ORDER BY cpf DESC ) AS y
          GROUP BY 1,2 ) AS x   
    
  7. ==============================

    7.오라클 쿼리 아래 희망이 작동합니다.

    오라클 쿼리 아래 희망이 작동합니다.

    Select First_column,LISTAGG(second_column,',') 
        WITHIN GROUP (ORDER BY second_column) as Sec_column, 
        LISTAGG(third_column,',') 
        WITHIN GROUP (ORDER BY second_column) as thrd_column 
    FROM tablename 
    GROUP BY first_column
    
  8. from https://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent by cc-by-sa and MIT license