본문 바로가기
내일배움 과제/기타 과제

걷기반 SQL - 6) 팀 프로젝트 열심히 했으니 다시 놀아볼까요?!

by GREEN나무 2024. 10. 18.
728x90

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

SELECT *,
DENSE_RANK() OVER (ORDER BY rating DESC) AS rating_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 *,
ROW_NUMBER() OVER (PARTITION BY region ORDER BY rating DESC)
AS region_rank FROM lol_users;

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

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

 


풀이

 

21

순위함수 : RANK, DENSE_RANK, ROW_NUMBER, NTILE

 

1) RANK 함수 : 중복 값들에 대해서 동일 순위로 표시하고, 중복 순위 다음 값에 대해서는 중복 개수만큼 떨어진 순위로 출력하도록 하는 함수입니다.

SELECT empNo, empName, salary,
RANK() OVER (ORDER BY salary DESC) rank
FROM employee;

 

2) DENSE_RANK 함수는 : 중복 값들에 대해서 동일 순위로 표시하고, 중복 순위 다음 값에 대해서는 중복 값 개수와 상관없이 순차적인 순위 값을 출력하도록 하는 함수입니다.

SELECT empNo, empName, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) dens_rank
FROM employee;

 

3) ROW_NUMBER 함수는 : 중복 값들에 대해서도 순차적인 순위를 표시하도록 출력하는 함수 입니다.

SELECT empNo, empName, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) row_number
FROM employee;

 

22

개수제한 : SELECT LIMIT

   SELECT * FROM 테이블명 LIMIT 숫자;

--위에서부터 지정한 개수 만큼의 자료를 보여줍니다.

 

1) 상위 n개만 출력

SELECT name FROM lol_users ORDER BY rating DESC LIMIT 3;
-- rating가 큰 순서로 배열 후 상위 3명의 이름을 출력

 

2) 원하는 순위 n개의 이름만 출력

SELECT name FROM lol_users ORDER BY rating DESC LIMIT 2,3;
-- rating가 큰 순서로 배열 후 3번째 부터 3명의 이름을 출력
-- 3,4,5위가 출력됨
-- 앞의 숫자는 0부터 시작하므로 23번째 유저입니다.

 

23

ROW_NUMBER() : 결과 집합의 행 일련 번호를 메겨주는 함수입니다. 일반적으로 PARTITION BY 구문과 함께 사용되며 특정 기준으로 나뉘어진 각 파티션의 행들은 ROW_NUMBER()에 의해 '1'부터 차례대로 넘버링 됩니다. 순위 동률을 메기는 RANK()와는 다르게 모든 행의 번호를 고유하게 순차적으로 지정하는 것이 특징입니다.

SELECT *,
ROW_NUMBER() OVER (PARTITION BY region ORDER BY rating DESC)
AS region_rank FROM lol_users;

 

윈도우 함수(Window Function) : 행과 행간의 관계를 쉽게 정의하기 위해 만든 함수입니다. 윈도우 함수에는 OVER 문구가 키워드로 필수 포함됩니다.

 


 

출처

21: https://doorbw.tistory.com/221

22: https://blog.naver.com/50after/220939872934

23: https://m.blog.naver.com/seokcrew/221580449695