SQL 쉼표, 다중기준, 랭크 레이팅 순위 구하기

습토리·2025년 2월 15일

SQL

목록 보기
3/12

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

1. 문제 개요

LOL 유저들의 레이팅(rating)을 기준으로 순위를 계산하는 SQL 쿼리를 작성해 봅시다. 전체 지역(region)을 통합해 레이팅이 높을수록 순위가 높아지도록 합니다.

출처: 내일배움캠프 - Spring 사전캠프 퀘스트 모음집


2. 최종 정답 쿼리

SELECT *,
       RANK() OVER (ORDER BY rating DESC) AS 'rank_no'
FROM lol_users;

📝 결과 예시:

idnameregionratingjoin_daterank_no
2배캠이미국15002020-09-011
3구구이한국14002021-01-072
4이션이미국13502019-11-153
1르탄이한국13002019-06-154

3. 쿼리 분석 및 중요 포인트

📌 1. 쉼표(,)의 중요성

  • 쉼표는 SELECT 구문에서 컬럼 간 구분자입니다.
  • 마지막 컬럼 뒤에 쉼표를 붙이면 SQL 문법 오류가 발생합니다.
  • 올바른 예:
    SELECT name, rating, join_date FROM lol_users;
  • 잘못된 예:
    SELECT name, rating, join_date, FROM lol_users;
    -- 마지막 쉼표는 오류 발생!

📌 2. RANK()OVER() 윈도우 함수

  • RANK(): 동일 레이팅일 경우 공동 순위를 부여하며, 다음 순위는 건너뜁니다.
  • OVER(): 윈도우 함수를 사용해 정렬 기준을 지정합니다.
  • ORDER BY rating DESC: 레이팅을 내림차순으로 정렬해 높은 점수일수록 순위가 높게 합니다.

📊 RANK, DENSE_RANK, ROW_NUMBER 차이:


📝 DENSE_RANK() 사용 예제:

SELECT *,
       DENSE_RANK() OVER (ORDER BY rating DESC) AS 'rank_no'
FROM lol_users;

4. 지역별 정렬: ORDER BY 다중 기준 사용하기

📌 문제 개요

LOL 유저 테이블에서 지역(region)별로 정렬하고, 같은 지역에서는 레이팅(rating)이 높은 순서로 정렬하는 SQL 쿼리를 작성해 봅시다.

올바른 정답:

SELECT * 
FROM lol_users 
ORDER BY region, rating DESC;

📝 결과 예시:

idnameregionratingjoin_date
3구구이한국14002021-01-07
1르탄이한국13002019-06-15
2배캠이미국15002020-09-01
4이션이미국13502019-11-15

📌 실수하기 쉬운 오류

잘못된 코드:

SELECT * FROM lol_users ORDER BY region ORDER BY rating;
-- `ORDER BY`를 두 번 사용하면 오류 발생!

올바른 코드:

SELECT * FROM lol_users ORDER BY region, rating DESC;

5. 마무리

이번 쿼리를 통해:

  • ORDER BY에서 여러 기준을 적용하는 방법을 익혔습니다.
  • 쉼표(,) 사용과 SQL 절(Clause) 작성 순서를 확인했습니다.
  • RANK(), DENSE_RANK(), ROW_NUMBER()의 차이를 배웠습니다.

SQL에서 다중 정렬 및 순위 계산은 데이터 분석과 검색 최적화에서 필수적인 기술입니다! 🎯

profile
재미난 삶을 살다

0개의 댓글