개발일지/SQL

SQL 문법 다지기(6)

프린스 알리 2024. 10. 10.
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 유저) 테이블을 참조하여 다음 문제들을 풀어보세요.

문제

  1. lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
  2. lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요
  3. lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
  4. 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

댓글