row_number() : 1등이 두명이어도 1, 2등으로 나눈다.
rank() : 1등이 두명이면 다음은 3등이다.
dense_rank() : 1등이 두명이면 다음은 2등이다.
사전 데이터 생성
row_number() over()
row_number() over() 만 쓴 경우
별로도 partition by 나 order by 를 주지 않았기 때문에 현재 데이터에서 번호만 붙었습니다.
row_number() over(partition by country)
나라별로 partition by를 적용해서 각각 번호가 생성되었습니다.
row_number() over(partition by country, team)
partition by 를 나라와 팀 두가지로 적용하였습니다. 그래서 먼저 나라로 나누고 그 안에서 팀으로 다시 나누어 순위가 정해졌습니다. 지금은 나라안의 팀이 달라서 모두 1로 나왔습니다. 여기에 만약 동일한 팀을 추가한다면 아래처럼 2가 생깁니다.
row_number() over(partition by country order by birth_year desc)
이번엔 order by 를 주어 나라별로 나이 어린 순으로 순위를 정했습니다.
rank() over()
rank() over()
order by 로 순서를 주지 않았기 때문에 모든 행이 동일하게 1순위를 가집니다.
partition by 만 적용하는 것도 순서만 바뀔 뿐, 동일하게 모두 1순위입니다.
rank() over(order by )
출생연도로 order by를 주니 같은 해인 경우 동일한 순위가 주어지고 5를 건너뛰어서 다음 순위를 주었습니다.
차두리와 호나우지뉴, 손흥민과 네이마르가 친구였군요!
rank() over(partition by order by)
partition by 를 주어 나라별로 나누고 그 안에서 팀으로 order by를 하였습니다.
이번엔 나라로 먼저 나누고 그 안에서 다시 팀으로 나눈 후 생년으로 order by를 해보았습니다.
나라 안에서 팀이 하나씩이기때문에 레버쿠젠인 차범근, 차두리 빼고 모두 1순위가 되었습니다.
dense_rank() over()
dense_rank() over()
rank() over() 와 마찬가지로 순서를 주지 않아 모든 행이 동일하게 1순위를 가집니다.
dense_rank() over(partition by ) 도 마찬가지 입니다.
dense_rank() over(order by )
rank()와 동일하게 차두리와 호나우지뉴, 손흥민과 네이마르가 같은 순위로 나오지만, 이번엔 다음 순위를 건너뛰지 않고 이어서 나옵니다.
dense_rank() over(partition by order by )
나라별로 나누고 팀으로 order by를 주었을 때 rank() 가 대한민국에서 1, 1, 3, 4 나왔던 것과의 차이점을 볼 수 있습니다.
'DB' 카테고리의 다른 글
[DB] ACID, 동시성 제어, serializabiliy, recoverabiliy, lock, MVCC, isolation 레벨 (0) | 2024.03.18 |
---|---|
[DB] 스키마가 뭔데? (0) | 2024.02.14 |
[postgreSQL] 포스트그레스 기본 명령어 실습해보기 (0) | 2024.01.09 |
[postgreSQL] 포스트그레스 설치하기(windows) (0) | 2024.01.08 |
도커를 이용한 mongDB 설치하기 (0) | 2023.09.21 |
댓글