데이터분석 기록일지

문제풀이/스파르타 - sql 문제

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

야하루 2024. 6. 7. 16:06

 

 

1. 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
# 1
select *
from practice6
order by rating desc

처음에는 이런식으로 rating을 기준으로 순서대로 나열만 했다가, 순위를 부여해 주고 싶어서 다른 쿼리를 짰다.

 

#2
select *, rank() over(order by rating desc) as "rank"
from practice6

순위를 부여하는 칼럼을 만들때 사용하는 함수
-> ROW_NUMBER(), RANK(), DENSE_RANK()OVER과 사용

0. OVER 안에는 순위를 결정하는 기준이 들어간다.
1. ROW_NUMBER() : 동일한 값을 가져도 다른 순위 부여
2. RANK() : 동일한 값에 같은 순위 & 다음 순위를 건너뜀 (EX: 공동2등 다음에 4등)
3. DENSE_RANK() : 동일한 값에 같은 순위 & 다음 순위를 건너뛰지 않음

 

+) 예전엔 몰랐는데 다시 보니까 window function 이네. 자세한 내용은 window function 포스팅 참고.

 

 

2. 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요!
select name
from practice6
order by join_date desc
limit 1

 

 

3. 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
select *
from practice6
order by region, rating desc

 

 

4. 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
select region, avg(rating)
from practice6
group by region