반응형
RANK()
함수는 중복 순위 다음은 해당 개수만큼 건너뛰고 반환
예를들어서 다음과 같은 A테이블이 있다하면
pay | user |
4.00$ | A |
3.00$ | B |
3.00$ | C |
2.00$ | D |
select rank() over(order by pay desc) as rank, pay, user
from A
다음과 같이 출력이된다
rank | pay | user |
1 | 4.00$ | A |
2 | 3.00$ | B |
2 | 3.00$ | C |
4 | 2.00$ | D |
ROW_NUMBER()
함수는 중복 순위 상관없이 순차적으로 반환
select row_number() over(order by pay desc) as rank, pay, user
from A
rank | pay | user |
1 | 4.00$ | A |
2 | 3.00$ | B |
3 | 3.00$ | C |
4 | 2.00$ | D |
DENSE_RANK()
select dense_rank() over(order by pay desc) as rank, pay, user
from A
rank | pay | user |
1 | 4.00$ | A |
2 | 3.00$ | B |
2 | 3.00$ | C |
3 | 2.00$ | D |
만약 그룹별로 순위를 매기고싶다면 over문에 partition by 구문을 추가하면 된다
만약 다음과같이 B테이블이 있다면
pay | user | team |
4.00$ | A | J |
3.00$ | B | J |
3.00$ | C | B |
2.00$ | D | B |
예시로 row_number함수를 이용한다치면
select row_number() over(partition by team order by pay desc) as rank, pay, user, team
from A
row_number | pay | user | team |
1 | 4.00$ | A | J |
2 | 3.00$ | B | J |
1 | 3.00$ | C | B |
1 | 2.00$ | D | B |
팀에 따라서 row_number수를 보여주게 된다
반응형
'Data > Data Analysis' 카테고리의 다른 글
[Pyspark] groupBy 개수 중복제거 countDistinct (0) | 2020.11.12 |
---|---|
[Pandas] apply, map, groupby등 모르는거 정리 (0) | 2020.11.04 |
[SQL] ARRAY_CONTAINS 함수 (0) | 2020.07.20 |
[Pyspark] UDF 함수에 parameter값 추가 (0) | 2020.05.08 |
[SQL] ROW_NUMBER(), LEAD(), LAG() (0) | 2020.04.29 |