본문 바로가기

내일배움캠프

[SQL 과제] Lv1. 데이터 속 김서방 찾기 + a

sql연습문제가 끝나고 본격적으로 DBeaver를 사용해서 과제를 수행하게 되었다.

하지만 그동안 강의를 다 수강했고 연습문제를 꾸준히 풀어왔다면 어렵지 않은 문제였다.

현재 매일 진행하는 sql 코딩테스트 연습의 난이도가 이번 과제보다 훨씬 어려웠기 때문에 푸는 것은 어렵지 않았다.

 

우선 이용자들의 정보를 조회해보자.

SELECT *
FROM users

user 테이블

이용자들의 데이터가 있는 user테이블을 호출했다. 우선 데이터가 어떤 형식인지 보고 싶었기 때문에 특정 열은 지정하지 않고 SELECT에 " * "을 입력했다.

name 열을 보니 익명화된 유저들의 이름이 보였다. WHERE를 이용해서 해당 열에 조건을 만족하는 데이터만 출력해보자.

 

SELECT *
FROM users
WHERE name LIKE('김%')

김서방만 출력

 

문자형 데이터에 출력조건을 설정하기 위해서 substr를 사용해도 됐지만 나에게 더 익숙한 함수는 like를 사용했다. 해당 구문을 WHERE substr(name, 1, 1) = '김'이라고 작성해도 동일한 데이터가 출력된다.

마지막으로 갯수를 세서 name_cnt라는 이름을 붙여서 출력하면 된다. SELECT절에 count를 사용하자.

 

SELECT COUNT(*) name_cnt 
FROM users
WHERE name LIKE('김%')

출력결과

 

이렇게 해서 정답과 같은 결과를 얻을 수 있었다.

확실히 DBeaver를 사용해서 중간과정을 알 수 있으니 문제가 더 쉽게 풀리는것같다.

원래였으면 오늘 과제는 이게 끝이지만, 너무 빨리 끝나버렸기 때문에 다른 sql문제를 풀어보기로 했다.

 

연습문제6) 팀 프로젝트 열심히 했으니 다시 놀아볼까요?!

lol_users 테이블

 

  • lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
select
	id,
    name,
    region,
    rating,
    join_date,
    rank() over (partition by region order by rating DESC) rating_rank
from lol_users

 

  • lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요
select name
from lol_users
order by join_date DESC
limit 1

 

  • lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
select *
from lol_users
order by
	region,
    rating DESC

 

  • lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
select
	region,
	avg(rating) avg_rating
from lol_users
group by region