, SUBSTR(MAX(RPAD(LEVEL, 5) || SYS_CONNECT_BY_PATH(col2, ',')), 7) AS col2 --> 9i부터 제공하는 SYS_CONNECT_BY_PATH 함수로 계층관계 연결 시 지나가게 되는 path들을 ',' 구분자로 표현함.
FROM(
SELECT
a.*
, row_number() OVER(PARTITION BY col1 ORDER BY col2) AS rn --> 분석함수로 col1별로 col2의 순서에 따라 랭킹을 매김.
FROM(
SELECT 'A' AS col1, 'ㄱ' AS col2 FROM dual UNION ALL
SELECT 'A' AS col1, 'ㄴ' AS col2 FROM dual UNION ALL
SELECT 'A' AS col1, 'ㄷ' AS col2 FROM dual UNION ALL
SELECT 'B' AS col1, 'ㄹ' AS col2 FROM dual UNION ALL
SELECT 'B' AS col1, 'ㅂ' AS col2 FROM dual UNION ALL
SELECT 'C' AS col1, 'ㅁ' AS col2 FROM dual UNION ALL
SELECT 'D' AS col1, 'ㅅ' AS col2 FROM dual UNION ALL
SELECT 'D' AS col1, 'ㅇ' AS col2 FROM dual
) a
) aa
CONNECT BY PRIOR rn = rn - 1
AND PRIOR col1 = col1 --> CONNECT BY 절이 계층결과를 만드는 구문임. PRIOR rn = rn-1의 의미는 데이터 중 rn이 현재 row의 rn-1과 같은 값을 현재row의 상위레벨로 삼는다라는 의미임. AND 조건은 col1의 값이 섞여서 상하위를 맺으면 안되므로 상위 col1과 하위 col1 값이 같은 데이터로만 계층을 만들라는 의미가 됨.