테이블이 있고 필드 값이 연결된 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과 동등한 기능이 있습니까?
답변
이것은 아마도 좋은 출발점이 될 것입니다 (버전 8.4 이상) :
SELECT id_field, array_agg(value_field1), array_agg(value_field2)
FROM data_table
GROUP BY id_field
array_agg 는 배열을 반환하지만 필요에 따라 텍스트를 작성하고 편집 할 수 있습니다 (아래 설명 참조).
버전 8.4 이전에는 사용하기 전에 직접 정의해야합니다.
CREATE AGGREGATE array_agg (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);
(PostgreSQL 문서에서 그린)
설명 :
- 배열을 텍스트로 캐스트 한 결과는 결과 문자열이 중괄호로 시작하고 끝나는 것입니다. 이러한 괄호는 원하지 않는 경우 일부 방법으로 제거해야합니다.
- ANYARRAY를 TEXT로 캐스팅하면 포함 된 쉼표가 포함 된 요소가 출력에서 표준 CSV 스타일로 이중 인용되므로 CSV 출력을 가장 잘 시뮬레이션합니다. array_to_string () 또는 string_agg () (9.1에 추가 된 “group_concat”함수)는 쉼표가 포함 된 문자열을 인용하지 않으므로 결과 목록에 요소 수가 잘못됩니다.
- 새로운 9.1 string_agg () 함수는 먼저 내부 결과를 TEXT로 캐스트하지 않습니다. 따라서 value_field가 정수이면 “string_agg (value_field)”는 오류를 생성합니다. “string_agg (value_field :: text)”가 필요합니다. array_agg () 메서드는 집계 후 값당 캐스트가 아닌 하나의 캐스트 만 필요합니다.
답변
답변
SELECT array_to_string(array(SELECT a FROM b),', ');
그렇습니다.
답변
이렇게 해보십시오 :
select field1, array_to_string(array_agg(field2), ',')
from table1
group by field1;
답변
배열 유형 에서 작동하는 버전 :
select
array_to_string(
array(select distinct unnest(zip_codes) from table),
', '
);
답변
postgresql에서 나의 sugestion
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
답변
오라클 쿼리가 작동하기를 바랍니다.
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