본문 바로가기

내일배움캠프

[SQL 과제] Lv2. 날짜별 획득포인트 조회하기 + a

어제에 이어서 DBeaver를 사용한 두번째 sql과제.

이번에도 차근차근 풀어보았다. 당연히 가장 먼저 할 것은 전체 테이블을 조회하는것.

SELECT *
FROM point_users

point_users 테이블

 

 

 

다음은 이번에 사용할 데이터만 조회한다. 가입일자 별로 획득한 평균 데이터를 조회할 것이기 때문에 필요한 것은 날짜 데이터가 있는 created_at와 포인트가 있는 point이다.

SELECT
	created_at,
	point
FROM point_users

 

날짜와 포인트를 조회한다.

 

 

이번에는 날짜의 표시형식을 변경해준다. 정답에는 '년-월-일' 형식으로 표시되어있기때문에 date_format을 이용해서 같은 형식으로 수정한다.

SELECT
	DATE_FORMAT(created_at, '%Y-%m-%d') created_at,
	point
FROM point_users

날짜의 표시형식 변경

 

 

그리고 날짜별로 평균 포인트 획득량을 계산한다. created_at의 열을 기준으로 group by를 사용하고 point열의 데이터를 avg를 통해서 평균을 구해준 뒤 round로 반올림해준다.

SELECT
	DATE_FORMAT(created_at, '%Y-%m-%d') created_at,
	ROUND(AVG(point)) average_points
FROM point_users
group by DATE_FORMAT(created_at, '%Y-%m-%d')

최종결과, 가입일자별 평균 포인트가 표시된다.

 

이렇게 최종결과를 얻어낼 수 있었다. 어제와 마찬가지로 원래 오늘 과제는 여기서 끝이지만, 사전캠프 일정상 빠진 두 연습문제 중 하나인 연습문제 7번을 풀어보기로 했다.

 

연습게임7) 랭크게임 하다가 싸워서 피드백 남겼어요…

lol_feedbacks 테이블

  • lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!
select *
from lol_feedbacks
order by satisfaction_score DESC

 

  • lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!
select
	id,
	user_name,
    max(feedback_date) Latest_feedback_data
from lol_feedbacks
group by user_name

 

  • lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!
select count(*) satisfaction_score_5
from lol_feedbacks
where satisfaction_score = 5

 

  • lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!
select
	id,
    user_name,
    count(*) feedback_count
from lol_feedbacks
group by id
order by feedback_count DESC
limit 3

 

  • lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!
select
	feedback_date,
    avg(satisfaction_score) avg_score
from lol_feedbacks
group by feedback_date
order by avg_score DESC
limit 1