[사전캠프] SQL 연습문제 - 6

2024. 8. 22. 00:11내일배움캠프

문제 :아래의 테이블을 참고해 문제 해결을 위한 SQL 문을 작성하자.

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

[lol_users(LOL 유저) 테이블]

Q1. 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성한다. 전체 지역(region) 기준으로 순위는 레이팅이 높을 수록 높아야한다.

SELECT name,
       RANK() OVER (ORDER BY rating DESC) ranking
FROM lol_users

 

 각 유저에 대한 순위란 말만 있어 각 유저의 이름(name)에 해당하는 순위를 내림차순으로 매긴 결과를 조회하는 쿼리를 작성하였다.

 

Q2.  가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성

SELECT name
FROM lol_users
ORDER BY join_date DESC
LIMIT 1

 

 시작 일(join_date) 을 내림차순으로 정렬하면 맨 위 레코드가 가장 늦게 시작한 유저의 데이터를 가진 레코드일 것이다. SELECT 를 통해 유저의 이름(name) 만 선택하고 LIMIT 를 통해 상단 첫 번째 레코드만 조회한다.

 

Q3. 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성

SELECT region, name, rating
FROM lol_users
ORDER BY 1, 3 DESC

 

 ORDER BY 를 통해 1순위로 'region` 을 오름차순 정렬해 지역별로 정렬되게하고 2순위로 'rating' 을 내림차순 정렬해 높은 레이팅을 가진 유저를 위로 정렬했다.

 

Q4. 지역별로 평균 레이팅을 계산하는 쿼리 작성

SELECT region, AVG(rating) avg_rating
FROM lol_users
GROUP BY 1

 

 'region' 컬럼을 그룹화, 그룹별 레코드들의 'rating' 값 평균을 'AVG' 로 연산해 'avg_rating' 컬럼에 출력하는 쿼리를 작성했다.