내일배움캠프/사전캠프 퀘스트

[내일배움캠프]_사전캠 SQL 퀘스트 2일차

cork-7 2024. 11. 28. 23:34

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

select *,
       rank() over (order by rating desc) ranking
from lol_users

 

22) lol_users  테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요

select name,
       join_date
from
(
select name,
       join_date,
       rank() over (order by join_date desc) Newbie
from
(
select name,
       join_date
from lol_users
) a
) b
where Newbie=1

맨 위 select 줄에 Newbie를 안적어 조회 테이블에 안나오게 진행

Limit 를 사용해서 할수도 있지만 배운걸로 하고 싶어서 rank와 Subquary사용

 

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

[정렬 순위 1. 지역 2. 점수]

 

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

select region,
       avg(rating) region_avg_rating
from lol_users
group by region 

[지역 조회, 점수로 평균계산, group by:원하는 단위, 즉 지역 단위로 평균 계산]

 

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

select *
from lol_feedbacks
order by satisfaction_score desc

 

26) lol_feedbacks  테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!

select user_name,
   max(feedback_date) Latest_feedback
from 
(
select *
from lol_feedbacks
order by user_name 
) a
group by user_name

[max를 사용해 최근날짜 선정]

 

27) lol_feedbacks  테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!

select count(satisfaction_score) count_of_max_score
from
(
select *
from lol_feedbacks 
where satisfaction_score = 5
) a

 

28) lol_feedbacks  테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!

select user_name,
       feedback_count,
       most_feedback_user as "피드백 상위 3"
from 
(
select user_name,
       feedback_count,
       rank() over (order by feedback_count desc) most_feedback_user
from 
(
select user_name,
       count(user_name) feedback_count
from lol_feedbacks 
group by user_name 
order by user_name 
) a
) b 
where most_feedback_user <= 3 

상위3명이지만 동수 적용해 모두 표시

[Limit걸어서 강제로 3명을 끊을 수 있지만 동점자가 다수여서 동점자 모두 포함하기 위해 rank사용]

--맨 아래 수를 2로해도 전부 표시됨--

ps.

이거 할려고 시간 다날림..

 

29) lol_feedbacks  테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!

select feedback_date,
       avg_score
from
(
select feedback_date,
       rank() over (order by avg_score desc) high_score_date,
       avg_score
from
(
select feedback_date,
       avg(satisfaction_score) as avg_score
from lol_feedbacks
group by feedback_date
) a
) b
where high_score_date = 1

[이것도 Limit사용가능 안하고 싶으면 rank사용]

 

[29번 기본 나열문]
[평균 구하고 높은순으로 나열]

 

최대한 배운걸로 진행하려고 노력했다.

오래걸렸지만 그래도 한계까지 끌고가서 푼것 같은 느낌을 받아서 좋았고 재밌었다.