본문 바로가기
SQL

[SQL 기초 연습] 6. 팀 프로젝트 열심히 했으니 다시 놀아볼까요?! - LOL 유저 테이블

by wooksss 2025. 1. 15.
SELECT 
    employee_id,
    hire_date,
    salary,
    RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees
WHERE hire_date BETWEEN '2025-01-01' AND '2025-01-15';

-- WHERE 절과 함께 사용하여 특정 기간 내의 순위도 반영 가능​
 
아래와 같은 lol_users(LOL 유저 테이블)이 있습니다.
id
name
region
rating
join_date
1
르탄이
한국
1300
2019-06-15
2
배캠이
미국
1500
2020-09-01
3
구구이
한국
1400
2021-01-07
4
이션이
미국
1350
2019-11-15
21.
lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)

    > SELECT name, rating, RANK() OVER (ORDER BY rating DESC) AS lol_rank FROM lol_users;

22.
lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요

    > SELECT name FROM lol_users ORDER BY join_date DESC LIMIT 1;

23.
lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
    > SELECT * FROM lol_users ORDER BY region, rating DESC;
24.
lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!

    > SELECT region, AVG(rating) AS average_rating FROM lol_users GROUP BY region;

 

-- 순위를 계산할 때 RANK() 함수를 사용 할 수 있다. 

-- RANK() 함수는 윈도우 함수이고 데이터를 정렬한 후 각 행의 순위를 부여하는 데 사용된다. 

-- 동일한 값에 대해 동일한 순위를 부여하고, 중복된 순위가 있는 경우 순위를 건너뛴다.

-- OVER와 같이 사용하여 정렬 조건을 지정할 수 있다.

SELECT 
    employee_id,
    salary,
    RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
SELECT 
    employee_id,
    hire_date,
    salary,
    RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees
WHERE hire_date BETWEEN '2025-01-01' AND '2025-01-15';

-- WHERE절과 사용하여 특정 기간 동안의 순위도 집계 가능

 

WHERE vs HAVING:

  • 날짜 조건이 순위 계산 이전에 적용 ▷ WHERE 절 사용
  • 날짜 조건이 순위 계산 이후에 적용 ▷ 외부 쿼리에서 필터링하거나 HAVING 절 사용 가능.