>데이터 베이스 >MySQL 튜토리얼 >Oracle의 LISTAGG 함수를 사용하여 고유한 값만 검색하려면 어떻게 해야 합니까?

Oracle의 LISTAGG 함수를 사용하여 고유한 값만 검색하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-19 18:21:09731검색

How Can I Retrieve Only Distinct Values Using Oracle's LISTAGG Function?

Oracle의 LISTAGG 함수를 사용하여 고유 값 검색

오라클의 LISTAGG 함수는 지정된 열의 값을 조인할 수 있습니다. 그러나 이 함수는 고유하지 않은 열에서 값을 검색할 때 중복된 결과가 발생할 수 있습니다.

질문:

함수나 프로시저를 사용하지 않고 열에서 고유한 값만 검색하고 싶을 때 LISTAGG 함수를 사용하세요. 예를 들어 다음 표를 살펴보세요.

col1 col2
1 2
1 2
1 3
1 4
1 5

LISTAGG를 col2에 적용하면 [2,2,3,4,5]라는 결과를 얻을 수 있습니다. 목표는 중복된 2를 제거하고 고유한 값만 표시하는 것입니다.

해결책:

19c 이상:

<code class="language-sql">select listagg(distinct col2, ',') within group (order by col2)
from the_table;</code>

18c 이하:

<code class="language-sql">select listagg(col2, ',') within group (order by col2)
from (
   select distinct col2 
   from the_table
) t;</code>

이러한 쿼리는 LISTAGG 함수에 DISTINCT 키워드를 사용하여 고유한 값만 포함되도록 합니다.

추가 열:

고유 값과 함께 여러 열을 검색해야 하는 경우 다음을 수행할 수 있습니다.

<code class="language-sql">select col1, listagg(col2, ',') within group (order by col2)
from (
  select col1, 
         col2,
         row_number() over (partition by col1, col2 order by col1) as rn
  from foo
  order by col1,col2
)
where rn = 1
group by col1;</code>

이 쿼리는 col1과 col2의 각 조합에 고유한 행 번호를 할당한 다음 각 col1 그룹의 첫 번째 행을 선택합니다.

위 내용은 Oracle의 LISTAGG 함수를 사용하여 고유한 값만 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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