[SQL] 오라클 포스트 그레스 'DISTINCT ON의 동등한?
SQL오라클 포스트 그레스 'DISTINCT ON의 동등한?
포스트 그레스에서는 DISTINCT ON와 그룹의 첫 번째 값을 조회 할 수 있습니다. 어떻게 오라클 달성 될 수 있는가?
포스트그레스 매뉴얼에서 :
예를 들어, 주어진 테이블 :
col1 | col2
------+------
A | AB
A | AD
A | BC
B | AN
B | BA
C | AC
C | CC
오름차순 정렬 :
> select distinct on(col1) col1, col2 from tmp order by col1, col2 asc;
col1 | col2
------+------
A | AB
B | AN
C | AC
내림차순 정렬 :
> select distinct on(col1) col1, col2 from tmp order by col1, col2 desc;
col1 | col2
------+------
A | BC
B | BA
C | CC
해결법
-
==============================
1.동일한 효과는 오라클 어느 FIRST_VALUE () 함수를 사용하거나 랭크 () 또는 ROW_NUMBER () 함수를 이용하여 복제 될 수있다.
동일한 효과는 오라클 어느 FIRST_VALUE () 함수를 사용하거나 랭크 () 또는 ROW_NUMBER () 함수를 이용하여 복제 될 수있다.
모두 포스트 그레스도 작업을 변형.
FIRST_VALUE ()
select distinct col1, first_value(col2) over (partition by col1 order by col2 asc) from tmp
는 각 파티션에 대해 하나의 행을 얻기 위해 별개로 조합하여 사용하는 것이 필요하므로 FIRST_VALUE은, 각 행의 첫 번째 파티션의 값하지만 반복을 제공한다.
ROW_NUMBER () / 순위 ()
select col1, col2 from ( select col1, col2, row_number() over (partition by col1 order by col2 asc) as rownumber from tmp ) foo where rownumber = 1
본 예에서는 순위를 ROW_NUMBER () 교체하면 동일한 결과를 산출한다.
이러한 변형의 특징은 간단히 = 1로 ROWNUMBER <= N. ROWNUMBER을 변경하여가 (예를 들어 "마지막 3 업데이트") 특정 파티션에 대한 제 N 열을 인출하는 데 사용될 수 있다는
-
==============================
2.두 개 이상의 필드가있는 경우 다음 beerbajays이 (DESC 순서 주) 하위 쿼리로 대답 사용
두 개 이상의 필드가있는 경우 다음 beerbajays이 (DESC 순서 주) 하위 쿼리로 대답 사용
select col1,col2, col3,col4 from tmp where col2 in ( select distinct first_value(col2) over (partition by col1 order by col2 DESC) as col2 from tmp --WHERE you decide conditions )
from https://stackoverflow.com/questions/10515391/oracle-equivalent-of-postgres-distinct-on by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 치명적인 오류 : C에서 정의 함수 sqlsrv_connect 문안 () : \ XAMPP \ htdocs에 (0) | 2020.05.12 |
---|---|
[SQL] 테이블 또는 열 이름은 숫자로 시작할 수 없습니다? (0) | 2020.05.12 |
[SQL] SQL에서 숫자가 포함 된 문자열 열을 정렬? (0) | 2020.05.12 |
[SQL] MySQL은 OUTPUT 절 (0) | 2020.05.12 |
[SQL] 사용자 정의 집계 함수 (CONCAT) SQL Server의 (0) | 2020.05.12 |