2012-03-17 4 views
0

내가 연속으로 3 명을 넣을 경우오라클 순위() 분석 함수

코 박스 알버트, 코 박스 다윗 나기 발라

Surename는 코바치, 나기입니다

FamilyName 알버트 데이비드, 발라 즈입니다

Familyname에 rank() 분석 함수를 실행하면 출력은 어떻게됩니까?

1-Kovács Albert 
1-Kovács Dávid 
3-Nagy Balázs 

또는

1-Kovács Dávid 
1-Kovács Albert 
3-Nagy Balázs 

또는 무작위 될 것인가?

난 당신이 나에게 어떤 온라인 무료 학습 인스턴스를 줄 수있는 경우 Familyname에이 같은 쿼리를 할 경우에, 나는 ...

+0

FYI - 실제 테스트를 수행하려면 Oracle XE를 무료로 다운로드하여 설치할 수 있습니다. –

답변

2

을 감사하겠습니다, 내 컴퓨터에 설치된 오라클이 없습니다. 출력은 다음과 같이 될 것입니다 :이 쿼리와

1-Kovács Albert 
1-Kovács Dávid 
1-Nagy Balázs 

:

SELECT 
    RANK() OVER(PARTITION BY FamilyName ORDER BY FamilyName) AS iRank, 
    Surename, 
    FamilyName 
FROM 
    Table1 

SureNameorder by FamilyNameRANK을합니다. 출력은 다음과 같이 될 것입니다 :이 쿼리와

1-Kovács Albert 
2-Kovács Dávid 
1-Nagy Balázs 

:

SELECT 
    RANK() OVER(PARTITION BY Surename ORDER BY FamilyName) AS iRank, 
    Surename, 
    FamilyName 
FROM 
    Table1 
+0

저는 SureName 대신 ForeName이나 FirstName을 써야한다고 생각합니다. 예를 읽기 쉽게 만듭니다. –

0

그것은 당신이 원하는에 전적으로 의존한다. 제안 된 결과 중 하나를 얻으려면 분석 조항이 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 

, 당신은 당신이하고자하는 것에하지만 만약 대량으로 특정 될 수 있습니다 결과 세트는 그것과 같을 것이다 것을 의미 순위에 의해 정렬됩니다 당신이 실행하는 질의에 정확히 있어야하는 특정 대답을 원한다.

documentationpartition 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이 없으면 결과 집합을 정렬 할 필요가 없습니다.