> 데이터 베이스 > MySQL 튜토리얼 > Oracle에는 MySQL의 `group_concat`과 동일한 기능이 있습니까?

Oracle에는 MySQL의 `group_concat`과 동일한 기능이 있습니까?

Barbara Streisand
풀어 주다: 2025-01-15 12:36:45
원래의
860명이 탐색했습니다.

Does Oracle Have a Function Equivalent to MySQL's `group_concat`?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿