Oracle 및 MySQL 문자열 집계: group_concat
데이터베이스 작업에서는 여러 행의 데이터를 단일 문자열로 결합해야 하는 경우가 많습니다. MySQL의 group_concat
기능은 이 과정을 단순화합니다. 그런데 오라클은 어떻게 같은 결과를 얻을 수 있을까요?
오라클 솔루션
Oracle은 MySQL의 group_concat
기능을 복제할 수 있는 여러 가지 방법을 제공합니다.
Oracle 11g 이상 버전의 경우 LISTAGG
함수는 다음과 같은 기능을 직접 제공합니다.
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS "names" FROM table_x GROUP BY col1</code>
각 col2
그룹의 col1
값을 ','로 구분하여 깔끔하게 집계합니다. ORDER BY
절은 일관된 문자열 순서를 보장합니다.
이전 Oracle 버전(10g 이하)에는 맞춤 기능이 필요합니다. 예는 다음과 같습니다.
<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val NUMBER) RETURN VARCHAR2 IS return_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP return_text := return_text || ',' || x.col2 ; END LOOP; RETURN LTRIM(return_text, ','); END; /</code>
이 함수는 행을 반복하여 return_text
에 값을 추가합니다. LTRIM
함수는 선행 쉼표를 제거합니다. 사용법:
<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
WM_CONCAT
은 일부 이전 Oracle 버전에 있었지만 현재는 지원되지 않습니다.
MySQL의 group_concat
비교
명확하게 설명하기 위해 MySQL group_concat
구문은 다음과 같습니다.
<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
col2
그룹당 col1
값을 간결하게 집계합니다. LISTAGG
의 명시적인 주문 기능은 부족하지만 비슷한 목적을 제공합니다.
위 내용은 Oracle에는 MySQL의 `group_concat`과 동일한 기능이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!