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 유저) 테이블을 참조하여 다음 문제들을 풀어보세요.
문제
lol_users
테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)lol_users
테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요lol_users
테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!lol_users
테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
문제 풀이
데이터베이스와 테이블 생성하기
CREATE DATABASE step6;
USE step6;
CREATE TABLE lol_users(
id INT PRIMARY KEY,
name VARCHAR(50),
region VARCHAR(50),
rating INT,
join_date DATE
);
INSERT INTO lol_users (id, name, region, rating, join_date) VALUES
(1, '르탄이', '한국', 1300, '2019-06-15'),
(2, '배캠이', '미국', 1500, '2020-09-01'),
(3, '구구이', '한국', 1400, '2021-01-07'),
(4, '이션이', '미국', 1350, '2019-11-15');
1번
lol_users
테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
Window Function은 각 행의 관계를 정의하기 위한 함수로 그룹 내의 연산을 쉽게 만들어준다.
Window Function의 기본 구조
`window_function(argument) over (partition by 그룹 기준 컬럼 order by 정렬 기준)`
그 중에서 우리는 순위를 매겨주는 기능인 Rank를 이용하도록 하겠다. rating을 기준으로 순위를 매긴 뒤 해당 컬럼은 ladder라고 명명하겠다.(유저를 특정 그룹으로 나누려는 기준이 따로 없으므로, partition by 부분을 생략하였다.)
쿼리는 아래와 같이 작성하였다.
정답 :
SELECT *
, rank() OVER (ORDER BY rating DESC) AS ladder
FROM lol_users;
정답 확인 :
2번
lol_users
테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요
가장 늦게 게임을 시작했다는 건 join_date의 값이 가장 클 것이란 의미
→ 서브쿼리에서 MAX(join_date)를 구하고, 메인쿼리의 WHERE절을 통해 해당 값을 가진 레코드(행)를 선택하자.
→ WHERE절로 선택한 행에서 name 필드값을 출력한다.
정답 :
SELECT name
FROM lol_users
WHERE join_date =
(
SELECT
MAX(join_date)
FROM lol_users
);
정답 확인:
3번
lol_users
테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
지역별로 그룹화하여 데이터를 정렬하는 건 ORDER BY로 가능하다.
정답 :
SELECT *
FROM lol_users
ORDER BY region, rating
DESC;
정답 확인 :
4번
lol_users
테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
여러 유저를 대상으로 평균 레이팅을 구해야 하므로 GROUP BY를 사용해야 한다.
주의사항 : GROUP BY 쿼리에는 기준 컬럼 혹은 집계함수 처리가 가능한 컬럼만 SELECT로 선택할 수 있다.
정답 :
SELECT region,
avg(rating) AS avg_rating
FROM lol_users
GROUP BY region;
정답 확인 :
'개발일지 > SQL' 카테고리의 다른 글
SQL 문법 다지기(8) (0) | 2024.10.14 |
---|---|
SQL 문법 다지기(7) (0) | 2024.10.10 |
SQL 문법 다지기(5) (4) | 2024.10.07 |
SQL 문법 다지기(4) (0) | 2024.10.04 |
SQL 문법 다지기(3) (1) | 2024.10.03 |
댓글