내일배움캠프 STEP 2. 속도에 맞춰 나아가기/SQL 기초

6. 팀 프로젝트 열심히 했으니 다시 놀아볼까요?!

김호진02 2024. 10. 14. 16:55

아래와 같은 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 유저의 순위)

 

조건 1. 모든 유저의 rating을 순위로 계산

 

순위 계산 함수 3가지

1. RANK()

 예) RANK() OVER (ORDER BY rating DESC) AS rank

  - 일 때 눞은 순으로 순위가 매겨지지만 같은 값에 대해선 같은 순위를 매긴 후 순위를 건너뜀.

  - 예시 ) 500점 1명 300점 2명 100점 1명일 경우 

             500점이 1등 300점 두명 모두 2등  100점은 3등이 아닌 4등이 됨.

2. DENSE_RANK()

 예) DENSE_RANK() OVER (ORDER BY rating DESC) AS rank

  - 일 때 높은 순으로 순위가 매겨지며 값은 값에 대해선 같은 순위를 매김. 순위를 건너 뛰지 않음

  - 예시 ) 500점 1명 300점 2명 100점 1명일 경우 

             500점이 1등 300점 두명 모두 2등  100점은 3등.

3. ROW_NUMBER()

 예) ROW_NUMBER() OVER (ORDER BY rating DESC) AS rank

 - 동일한 값이 있어도 각 항목별 고유한 순번을 가짐.

 

답)

SELECT name

FROM team_projects 

WHERE aws_cost>=40000;

 

 

22번 문제

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

 

조건 1. 가장 늦게 게임을 시작한(join_date) 유저 (ORDER BY절  사용)

답)

SELECT name

FROM lol_users

ORDER BY join_date DESC

LIMIT 1;

LIMIT 1 쿼리 결과에서 가장 첫번째 행을 반환하도록 제한 하는 것.

 

23번 문제

 - lol_users  테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!

 

조건 1 . 지역별  레이팅이 높은 순(ORDER BY)

답)

SELECT *

FROM lol_users

ORDER BY region, rating DESC;

 

24번 문제

 - lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!

 

조건1. 지역별(group by) 평균 레이팅(avg() 함)

답)

SELECT AVG(rating)

FROM lol_users

GROUP BY region;