>데이터 베이스 >MySQL 튜토리얼 >Oracle에서 행을 효율적으로 연결하고 그룹화하려면 어떻게 해야 합니까?

Oracle에서 행을 효율적으로 연결하고 그룹화하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-04 19:06:39916검색

How Can I Efficiently Concatenate and Group Rows in Oracle?

Oracle의 행 연결 및 그룹화: 행 조작 및 집계 기술 재검토

데이터 조작 및 집계 영역에서 Oracle은 다양한 기능을 제공합니다. 대규모 데이터 세트를 효율적으로 처리할 수 있는 기능 집합입니다. 일반적인 작업 중 하나는 원하는 결과를 얻기 위해 여러 행을 연결하고 그룹화하는 것입니다.

다음 시나리오를 고려해 보세요. NAME 및 GROUP_NAME 열이 있는 테이블이 있는 경우 행이 그룹화되는 새 테이블로 데이터를 변환하려고 합니다. GROUP_NAME 및 해당 NAME 값은 각 그룹 내에서 연결됩니다.

이 작업에 대한 한 가지 접근 방식은 제공된 SQL 문에 표시된 대로 SYS_CONNECT_BY_PATH 함수. 이 접근 방식은 각 그룹 내의 행 값을 연결하여 연결된 문자열을 반복적으로 작성합니다.

그러나 고급 시나리오의 경우 LISTAGG 함수가 정교한 솔루션을 제공합니다. Oracle 11g 이상에서 지원되는 LISTAGG를 사용하면 각 그룹 내에서 값을 지정된 구분 기호(예: 쉼표)로 구분하여 효율적으로 집계할 수 있습니다.

SELECT group_name,
       LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) "names"
FROM name_table
GROUP BY group_name

LISTAGG가 없는 이전 버전의 Oracle의 경우 다음을 고려하세요. 행 연결을 달성하기 위해 ROW_NUMBER 및 SYS_CONNECT_BY_PATH와 같은 분석 기능을 활용하고 그룹화.

select grp,
    ltrim(max(sys_connect_by_path
       (name, ',' )), ',')
        scbp
  from (select name, grp,
            row_number() over
           (partition by grp
            order by name) rn
         from tab
          )
start with rn = 1
connect by prior rn = rn-1
and prior grp = grp
  group by grp
  order by grp

이러한 기술을 탐색하면 Oracle에서 행을 효과적으로 연결하고 그룹화하여 복잡한 데이터 조작 및 집계 요구 사항을 쉽게 처리할 수 있습니다.

위 내용은 Oracle에서 행을 효율적으로 연결하고 그룹화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.