집 >데이터 베이스 >MySQL 튜토리얼 >Oracle의 LISTAGG 함수를 사용하여 고유한 값만 검색하려면 어떻게 해야 합니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!