
[SQL: LOL 유저 레이팅 순위 구하기 - 윈도우 함수 RANK(), OVER(), ORDER BY 정리]

LOL 유저들의 레이팅(rating)을 기준으로 순위를 계산하는 SQL 쿼리를 작성해 봅시다. 전체 지역(region)을 통합해 레이팅이 높을수록 순위가 높아지도록 합니다.
출처: 내일배움캠프 - Spring 사전캠프 퀘스트 모음집
SELECT *,
RANK() OVER (ORDER BY rating DESC) AS 'rank_no'
FROM lol_users;
| id | name | region | rating | join_date | rank_no |
|---|---|---|---|---|---|
| 2 | 배캠이 | 미국 | 1500 | 2020-09-01 | 1 |
| 3 | 구구이 | 한국 | 1400 | 2021-01-07 | 2 |
| 4 | 이션이 | 미국 | 1350 | 2019-11-15 | 3 |
| 1 | 르탄이 | 한국 | 1300 | 2019-06-15 | 4 |
,)의 중요성SELECT name, rating, join_date FROM lol_users;SELECT name, rating, join_date, FROM lol_users;
-- 마지막 쉼표는 오류 발생!RANK()와 OVER() 윈도우 함수RANK(): 동일 레이팅일 경우 공동 순위를 부여하며, 다음 순위는 건너뜁니다.OVER(): 윈도우 함수를 사용해 정렬 기준을 지정합니다.ORDER BY rating DESC: 레이팅을 내림차순으로 정렬해 높은 점수일수록 순위가 높게 합니다.📊 RANK, DENSE_RANK, ROW_NUMBER 차이:

SELECT *,
DENSE_RANK() OVER (ORDER BY rating DESC) AS 'rank_no'
FROM lol_users;
ORDER BY 다중 기준 사용하기LOL 유저 테이블에서 지역(region)별로 정렬하고, 같은 지역에서는 레이팅(rating)이 높은 순서로 정렬하는 SQL 쿼리를 작성해 봅시다.
SELECT *
FROM lol_users
ORDER BY region, rating DESC;
| id | name | region | rating | join_date |
|---|---|---|---|---|
| 3 | 구구이 | 한국 | 1400 | 2021-01-07 |
| 1 | 르탄이 | 한국 | 1300 | 2019-06-15 |
| 2 | 배캠이 | 미국 | 1500 | 2020-09-01 |
| 4 | 이션이 | 미국 | 1350 | 2019-11-15 |
❌ 잘못된 코드:
SELECT * FROM lol_users ORDER BY region ORDER BY rating;
-- `ORDER BY`를 두 번 사용하면 오류 발생!
✅ 올바른 코드:
SELECT * FROM lol_users ORDER BY region, rating DESC;
이번 쿼리를 통해:
ORDER BY에서 여러 기준을 적용하는 방법을 익혔습니다.,) 사용과 SQL 절(Clause) 작성 순서를 확인했습니다.RANK(), DENSE_RANK(), ROW_NUMBER()의 차이를 배웠습니다.SQL에서 다중 정렬 및 순위 계산은 데이터 분석과 검색 최적화에서 필수적인 기술입니다! 🎯