그것은 당신이 원하는에 전적으로 의존한다. 제안 된 결과 중 하나를 얻으려면 분석 조항이 rank() over (order by surname)
이어야합니다. 이 쿼리는 surname
오름차순으로 모든 레코드의 rank
을 제공합니다. 같은 성을 가진 두 사람이 있으니이 두 사람의 순서는 이론적으로는이어야합니다. rank()
이 실제로 결과 집합의 순서를 지정하지 않기 때문에이 작업을 수행하려면 order by
절이 필요합니다. 적어도 원하는 결과를 보장 할 수 있습니다. 같은
뭔가 :
select rank() over (order by surname asc, familyname asc) as rnk
, surname, familyname
from my_table
order by rank() over (order by surname asc, familyname asc)
이 쿼리가 상승하는 성 (姓)과 가족 이름의 순서 성, 가족 이름과 순위를 반환합니다.
이것은 이익 및 분석 기능에 문제가
1 | Kovács | Albert
2 | Kovács | Dávid
3 | Nagy | Balázs
, 당신은 당신이하고자하는 것에하지만 만약 대량으로 특정 될 수 있습니다 결과 세트는 그것과 같을 것이다 것을 의미 순위에 의해 정렬됩니다 당신이 실행하는 질의에 정확히 있어야하는 특정 대답을 원한다.
documentation은 partition by
절을 사용하는 다른 예를 제공합니다. 이를 검색어에 적용 할 경우 surname
으로 파티셔닝하고 familyname
으로 주문하면 검색어 및 결과 집합이 다음과 같이 보일 수 있습니다.
select rank() over (partition by surname order by familyname asc) as rnk
, surname, familyname
from my_table
2 | Kovács | Dávid
1 | Kovács | Albert
1 | Nagy | Balázs
이것은 우리가 개별적으로 각 성 (姓)에 대한 모든 familynames 순위를 의미합니다. Dávid가 알버트를 쫓고 있기 때문에 그는 Kovács라는 성에서 2의 등급을 얻습니다. 특정
order by
이 없으면 결과 집합을 정렬 할 필요가 없습니다.
출처
2012-03-17 22:53:32
Ben
FYI - 실제 테스트를 수행하려면 Oracle XE를 무료로 다운로드하여 설치할 수 있습니다. –