728x90
만약 [STUDENTS]라는 테이블이 존재할 때, RANK함수별 어떻게 결과가 나타나는지 확인해보자.
ID | NAME | AGE | SCORE |
1 | 김바닐라 | 18 | 76 |
2 | 이포도 | 15 | 95 |
3 | 조망고 | 14 | 83 |
4 | 박딸기 | 19 | 83 |
1. ROW_NUMBER()
: 결과 집합 내의 각 행에 고유 번호를 할당.
SELCT ID, NAME, AGE, SCORE,
ROW_NUMBER() OVER(ORDER BY SCORE DESC) AS GRADE_RANK
FROM STUDENTS;
ID | NAME | AGE | SCORE | GRADE_RANK |
1 | 김바닐라 | 18 | 76 | 4 |
2 | 이포도 | 15 | 95 | 1 |
3 | 조망고 | 14 | 83 | 2 |
4 | 박딸기 | 19 | 83 | 3 |
2. RANK()
: 동일한 값을 가진 행에 대해 동일한 순위를 사용한다.
동일한 값을 가진 행은 동일한 순위를 받고 다음 순위에 대한 시퀀스에 간격이 나타난다.
ex) 2등을 한 사람이 2명일 경우, 1등 2등 2등 4등
SELCT ID, NAME, AGE, SCORE,
RANK() OVER(ORDER BY SCORE DESC) AS GRADE_RANK
FROM STUDENTS;
ID | NAME | AGE | SCORE | GRADE_RANK |
1 | 김바닐라 | 18 | 76 | 4 |
2 | 이포도 | 15 | 95 | 1 |
3 | 조망고 | 14 | 83 | 2 |
4 | 박딸기 | 19 | 83 | 2 |
3. DENSE_RANK()
: RANK()와 유사하지만, 동일한 순위 값이 있을 경우 순위 시퀀스에 간격이 없다.
즉, 4명 중 2등을 한 사람이 2명이어도 1등 2등 2등 3등이 된다.
SELCT ID, NAME, AGE, SCORE,
DENSE_RANK() OVER(ORDER BY SCORE DESC) AS GRADE_RANK
FROM STUDENTS;
ID | NAME | AGE | SCORE | GRADE_RANK |
1 | 김바닐라 | 18 | 76 | 3 |
2 | 이포도 | 15 | 95 | 1 |
3 | 조망고 | 14 | 83 | 2 |
4 | 박딸기 | 19 | 83 | 2 |
728x90
'코딩테스트 > 정리' 카테고리의 다른 글
[MySQL] SUBSTR() 사용해서 문자열 뒤에서 부터 자르기 (0) | 2024.05.16 |
---|---|
[MySQL] CONV함수 사용해서 진수 변환하기 (0) | 2024.05.16 |
[코테 대비] BFS/DFS 정리 + 차이점 (0) | 2024.02.06 |
[MySQL] GROUP BY 1 (0) | 2023.07.05 |
[MYSQL] 중복제거한 데이터 개수 카운트하기 (0) | 2023.06.07 |