[내일배움캠프 사전캠프]

[QAQC_2기] 사전캠프 퀘스트 6~10 문항

mulmoknnhama 2025. 4. 30. 16:52

제 6 문항

풀이 과정

 

21. 필요한 컬럼 - 이름, 레이팅

그리고 select 에 윈도우 함수(window function)을 사용

select name,
       rating,
       rank() over (partition by region order by rating desc) ranking
from lol_users

이름 컬럼과, 레이팅 컬럼

윈도우 함수의 그룹컬럼 기준은 지역, 순서는 내림차순이므로 desc

 

22. 필요한 컬럼 - 이름

select name
from lol_users
order by join_date desc
limit 1

이름 컬럼, 컬럼을 정렬하는 order by, 수를 제한하는 limit구문

 

23. 필요한 컬럼 - 전체

지역별로 레이팅이 높은순 정렬

select region,
       id,
       name,
       rating,
       join_date
from lol_users
group by 1
order by rating desc

작성문

select *
from lol_users
order by region, rating desc

정답문

order by에도 두 개의 컬럼값이 들어가나 처음본다.

-> 두 개 들어갈 수 있는 것 같다

 

24. 필요한 컬럼 - 지역, 레이팅 평균

avg()를 활용

select region,
       avg(rating) avg_rat
from lol_users
group by 1

지역별로 레이팅의 평균을 구한다고 했으니, group by절을 이용


제 7 문항

풀이 과정(28번 답이 안나와야하는데, 캡쳐과정에서 실수...)

 

25. 필요한 컬럼 - 전체

select *
from lol_feedbacks
order by satisfaction_score desc

만족도 점수에 따라 내림차순으로 정렬 - order by, desc

 

26. 필요한 컬럼 - 유저, 피드백 날짜

select name,
       max(feedback_date)
from lol_users
group by 1

유저 별로 group by, 최신 날짜 저 날짜중의 최대값 max

 

27. 필요한 컬럼 - 카운트 count()

select count(1)
from lol_users
where satisfaction_score = 5

피드백의 수를 센다 - count, 만족도 점수 5점 - where절에 비교연산 

 

28. 필요한 컬럼 - 이름, 피드백 수

select name,
       count(1) cnt_fdbk
from lol_feedbacks
group by 1
order by cnt_fdbk desc
limit 3

고객을 찾음 - 이름, 피드백 수 - count, 고객별로 묶음 - group by, 피드백 많은수 정렬 - order by , desc(내림차순), 3개 제한 - limit

 

29. 필요한 컬럼 - 날짜

select feedback_date
from lol_users
group by 1
order by avg(satisfaction_score) desc
limit 1

문장가지고 장난 잘 친다 이놈들...

알기쉽게 다시 쓰면 날짜별로 평균 만족도 점수가 높은 것을 찾으면 된다.

 

고객별 - feedback_date, group by 절

높은 평균 만족도 점수 - avg(), order by절

수 제한 - limit

 

제대로 읽고 가는게 중요한 것 같다.

'~별로 로 나오는 것이 아닌 저렇게 나오는게 방심하지말고 잘 읽으세요^^' 라고 하시는 것 같아 당황스럽다

왜 여기서 독해 문제가 나오나요. 국어시험인가요?


제 8 문항

풀이 과정

 

30. 필요한 컬럼 - 이름

select name
from doctors
where major = '성형외과'

성형외과를 찾고싶다 - where절, 비교연산자

 

31. 필요한 컬럼 - 전공, 카운트함수

select major,
       count(1)
from doctors
group by 1

전공 별 의사수 select와 group by에 major

의사수 세기 count(1)

 

32. 필요한 컬럼 - 수 세기

select count(1) cnt_doc
from doctors
where hire_date <= date_sub(curdate(), interval 5 year)

못 푼거 반, 푼거 반이라 설명

-의사 숫자 세는 카운트 함수 count(1)

-시간(날짜)를 빼야되는 함수 date_sub(기준날짜, interval 'time')

  -더하여야 할 때는 date_add

 

33. 필요한 컬럼 - 이름, 근무한 날짜

select name,
       datediff(curdate(), hire_date) work_days
from doctors

어떤 의사인지 - 이름

근무한 날짜 계산 - datediff(나중날짜, 기존 날짜) -> 나중날짜에서 기존날짜를 뺀 값을 보낸다.

 

이 문항도 새로 알아 가는게 있어서 나름 괜찮은듯?


제 9 문항

풀이 과정

 

34. 필요한 컬럼 - 성별, 환자 수

select gender,
       count(1)
from patients
group by 1

성별에 따른 - group by절

환자 수 - count()함수

 

35. 필요한 컬럼 - 환자 수

select count(1)
from patients
where birth_date <= date_sub(curdate(), interval 40 year)

환자 수 - count()함수

나이 계산 - date_sub함수를 이용하여 현재에서 40살을 뺀다. -> 출생일이 값보다 적으면 됨

 

36. 필요한 컬럼 - 전체

select *
from patients
where last_visit_date <= date_sub(curdate(), interval 1 year)

환자들 데이터가 필요하므로 전체

마지막 방문날짜 기준 1년 이상 - date_sub함수를 이용하여 1년을 뺀다 -> 방문날짜가 값보다 적으면 됨

 

37. 필요한 컬럼 - 환자 수

select count(1)
from patients
where birth_date between '1980-01-01' and '1989-12-31'

환자 수 - count()함수

1980년대(1980~1989) - where절, between and 비교연산

 

크게 어려운 점은 없다


제 10 문항

풀이 과정

 

38. 필요한 컬럼 - 부서의 수

select count(1)
from departments

수 세기 - count()함수

 

39. 필요한 컬럼 - 부서의 이름

select e.name,
       d.name
from employees e left join departments d on e.department_id=d.id

두 테이블을 합쳐야 어디에 속한지 알 수 있음 - left join

같은 값의 컬럼으로 묶어줘야한다 - employees의 department_id와 departments의 id 컬럼

 

40. 필요한 컬럼 - 부서에 속한 직원들의 이름

select e.name
from employees e left join departments d on e.department_id=d.id
where d.name = '기술팀'

두 테이블을 합쳐야 어디에 속한지 알 수 있음 - left join

같은 값의 컬럼으로 묶어줘야한다 - employees의 department_id와 departments의 id 컬럼

기술팀 조건이 붙음 - where절

 

41. 필요한 컬럼 - 

select d.name,
       count(e.id)
from employees e left join departments d on e.department_id=d.id
group by 1

상단의 문제와 묶어주기는 동일

부서별 - group by절

직원수세기 - count(e.id)

 

42. 필요한 컬럼 - 부서 명

select d.name
from employees e left join departments d on e.department_id=d.id
where e.id is null

묶어주기는 동일 (left join)

직원이 없는 조건 - where절 , is null 작성

 

43. 필요한 컬럼 - 직원 이름

select e.name
from employees e inner join departments d on e.department_id=d.id
where d.name = '마케팅팀'

마게팅팀 부서에만 속한다

inner join을 넣는다. 공통된 값만 넣어야됨

where절 - '마케팅팀 부서만' 이라는 조건