인사말

안녕하세요!

벌써 공부한지 일주일이나 됐네요! 시간이 정말 빠른 거 같습니다 ㅎㅎ

오늘도 공부한 내용을 포스팅해보도록 하겠습니다.

그리고, 오늘은 멘탈이 붕괴되었던 7번 8번 퀘스트였습니다..

많이 어렵더라구요 😥

아직은 모르기 때문에 어렵다고 생각을 해요!

알아가다 보면 쉽게 할 수 있지 않을까 싶어요😋


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

7) 랭크게임 하다가 싸워서 피드백 남겼어요.sql
0.00MB

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

select satisfaction_score
from feedback
order by satisfaction_score;

결과값

기본적으로 SQL에서는 내림차순(desc)로 돼 있다고 해서 한 번 desc를 적지 않고 정렬해봤습니다!

정렬할 때order by를 쓴다는 것을 다시 한 번 더 확인 할 수 있었던 문제였네요~!

 

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

select user_name, max(feedback_date)
from feedback
group by user_name
order by user_name;

문제에 "최신"을 힌트삼아서 MAX(최댓값, 최근값)을 활용하여 해결하였습니다!

저번 시간에도 MAX를 활용하여 최근값을 구했었던 기억이 나서 반가웠던 문제였습니다~!

Max와 함께 group by도 써서 특정 컬럼에 대한 최근값을 불러올 수 있었습니다.

group by는 지정된 컬럼을 기준으로 데이터를 그룹화하는 것을 뜻하더라구요

다시 한 번 개념을 재정비 할 수 있어서 좋았어요!

 

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

select count(*)
from feedback
where satisfaction_score=5;

SQL 강의 때 봤었던 count() 코드!! 오늘 써보았습니다!

이제 Where문은 익숙하게 잘 다뤄서 너무 재밌네요 😜

count() 함수 뒤에는 as를 붙여서 컬럼 명을 지어주어야 한다는 걸 깜빡했어요!

as가 없으니까 count(*)로 컬럼 명이 생성되었네요 🤣

 

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

select user_name, count(*) as 'top 3'
from feedback
group by user_name
limit 3;

이번에는 count(*) as를 써주어서 top 3라는 컬럼을 생성하였습니다!

여기서 Limit를 처음 알게 되었는데요!

영단어 뜻대로 3개로 한정지어서 값을 표현해주는 코드라고 하더라구요

새롭게 배웠습니다!

 

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

select feedback_date, avg(satisfaction_score) as avg_satisfaction_score
from feedback
group by feedback_date
order by avg_satisfaction_score desc
limit 1;

7번째 퀘스트의 마지막 문제입니다!

"평균", "만족도 점수가 가장 높은", "날짜"가 주요 단어인 거 같죠??

평균을 구하는 avg()와 as를 붙여 컬럼명을 지어주고,

group by를 써서 feedback_date의 데이터를 그룹화 해주고

order by를 써서 정렬 해주었습니다!

그리고 limit를 써서 가장 큰 값 한 가지를 가지고 온 결과값입니다!


오늘의 마지막 문제인 8번 퀘스트를 포스팅 시작하겠습니다

8) 🥼 LOL을 하다가 홧병이 나서 병원을 찾아왔습니다.

데이터 베이스가 될 파일 내용입니다.
8) LOL을 하다가 홧병이 나서 병원을 찾아왔습니다.sql
0.00MB

 

문제 1. 테이블에서 전공(major)가 성형외과인 의사의 이름을 알아내는 쿼리를 작성해주세요!

select name
from fire
where major="성형외과";

 

문제 2. 테이블에서 각 전공 별 의사 수를 계산하는 쿼리를 작성해주세요!

select major, count(id) as `의사 수`
from fire
group by major;

여기까지는 무난하게 해결하였던 문제들이었습니다!

문제는 여기서부터 너무 어렵더라구요 😥

 

문제 3. 테이블에서 현재 날짜 기준으로 5년 이상 근무(hire_date)한 의사 수를 계산하는 쿼리를 작성해주세요!

select count(id) as `의사 수`
from fire
where hire_date <= current_date()- interval 5 year;

날짜 계산을 할 때 Interval 함수를 쓴다고 하더라구요

이번에 새롭게 알게 된 함수였습니다.

그리고

"현재 날짜 기준"이라고 하였으니, Current_date() 함수를 활용하여 문제를 해결하였습니다!

 

대망의 8번째 퀘스트의 마지막 문제! 

저는 여기가 제일 어려웠습니다 😥

 

문제 4. 테이블에서 각 의사의 근무 기간을 계산하는 쿼리를 작성해주세요!

select name, hire_date, 
timestampdiff(year, hire_date, current_date()) as `근무 기간(년)`,
timestampdiff(month, hire_date, current_date()) as `근무 기간(개월)`,
datediff(current_date(), hire_date) as `근무 기간(일수)`
from fire;

오늘 새롭게 알게 된 함수가 굉장히 많았고, 그만큼 머리가 많이 아팠습니다,,

timestampdiff(year or month, 컬럼명, current_date()) as 새롭게 만들어질 컬럼명

이 함수를 새롭게 알게 되었습니다!

MySQL에서만 사용되는 함수라고 하시더라구요

그래서

MySQL에서 날짜를 계산할 때는 timestampdiff와 datediff를 활용하면 될 거 같습니다!

일수를 계산할 때는 datediff를 쓰는데, timestampdiff와의 차이점이 timestampdiff는 최근 날짜가 뒤로 가고,

datediff는 최근 날짜가 앞에 있다는 걸 발견하였습니다.


마무리

오늘은 평소보다 더 시간이 많이 걸렸던 거 같아요

너무 막막했습니다.. 알듯 말듯하는 이 느낌이 답답해서 힘들더라구요

그래도 팀원들과 소통하여 모르는 것도 좁혀가고 배워가서 재밌었습니다!

감사합니다!

 

<새롭게 배운 것들>

1. limit : 표시하는 결과값을 제한함

2. Interval : 날짜를 계산할 때 쓰이는 함수

3. timestampdiff : 년, 개월로 날짜를 계산할 때 쓰이는 함수

+ Recent posts