6. 팀 프로젝트 열심히 했으니 다시 놀아볼까요?!
아래와 같은 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;