[내일배움캠프-사전캠프] SQL 단계별 문제 풀이

2025. 1. 20. 17:24·백엔드 부트캠프[사전캠프]/문제풀이

[7단계] 랭크게임 하다가 싸워서 피드백 남겼어요… 

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

내림차순은 DESC, 오름차순은 ASC

SELECT *
FROM lol_feedbacks
ORDER BY satisfaction DESC

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

- 유저별로 최신 피드백을 찾아야하기 때문에.

- feedback_date 가 가장 높은 서브쿼리를 만들어서, 피드백을 출력한다.

SELECT *
FROM lol_feedbacks t1
WHERE feedback_date = (
    SELECT MAX(feedback_date)
    FROM lol_feedbacks t2
    WHERE t1.user_name = t2.user_name
);

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

- 만족도 점수가 5점이다. 라는 조건을 주어야한다. 그리고 해당 피드백의 수를 계산하는 것이기 때문에 Count 라는 함수도 사용해야한다.

SELECT count(*)
FROM lol_feedbacks
WHERE satisfaction_score=5

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

- 가장많은 피드백을 남긴 사람을 어떻게 구하나? 일단 USER 별로 count를 해야한다.

- 상위 3개를 원한다? 그러면 ORDER BY로 순서대로 나열후 LIMIT로 출력값을 3개로 제한하면 된다.

SELECT user_name, count(user_name) as count
FROM lol_feedbacks
GROUP BY user_name
ORDER BY count DESC
LIMIT 3

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

- GROUP BY 해서, AVG 주기. 날짜별로 그룹핑 해서 > AVG(satisfaction) 하면 될듯

SELECT feedback_date
FROM lol_feedbacks
GROUP BY feedback_date
ORDER BY AVG(satisfaction_score) DESC
LIMIT 1;

 

[8단계] LOL을 하다가 홧병이 나서 병원을 찾아왔습니다.

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

SELECT name
FROM doctors
WHERE major = '성형외과'

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

SELECT major ,count(name)
FROM doctors
GROUP BY major

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

- CURDATE()와 hire_date 의 차이를 구한 후, 5년 이상(5*356) 을 조회.

SELECT count(*)
FROM doctors
WHERE DATEDIFF(CURDATE(), hire_date) >= 5*365

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

SELECT name, DATEDIFF(CURDATE(), hire_date)
FROM doctors

 

[9단계] 아프면 안됩니다! 항상 건강 챙기세요! 

34. patients 테이블에서 각 성별(gender)에 따른 환자 수를 계산하는 쿼리를 작성해주세요!

SELECT gender, count(*)
FROM patients
GROUP BY gender

35.patients 테이블에서 현재 나이가 40세 이상인 환자들의 수를 계산하는 쿼리를 작성해주세요!

- TIMESTEMPDIFF 를 통해서 YEAR 계산을 통해 40세 이상 조회

SELECT COUNT(*)
FROM patients
WHERE TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) >= 40;

36.patients 테이블에서 마지막 방문 날짜(last_visit_date)가 1년 이상 된 환자들을 선택하는 쿼리를 작성해주세요!

- DATEDIFF를 통해서 365일 (1년) 이상 조회

SELECT COUNT(*)
FROM patients
WHERE DATEDIFF(CURDATE(), last_visit_date)>= 365

37. patients 테이블에서 생년월일이 1980년대인 환자들의 수를 계산하는 쿼리를 작성해주세요!

- 1980년대이니, 출생년도가 1980~1989 사이여야함.

SELECT COUNT(*)
FROM patients
WHERE YEAR(birth_date) BETWEEN 1980 AND 1989;

 

오늘은 일단 끘 : > 

밥 먹고 10단계랑 마지막 문제 풀기 ! 

'백엔드 부트캠프[사전캠프] > 문제풀이' 카테고리의 다른 글

[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (1) 2025.01.21
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (3) 2025.01.21
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (1) 2025.01.19
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (0) 2025.01.18
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (1) 2025.01.17
'백엔드 부트캠프[사전캠프]/문제풀이' 카테고리의 다른 글
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
sintory-04
sintory-04
🚀🚀🚀
  • sintory-04
    Sintory Dev Blog
    sintory-04
    글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (289)
      • 백엔드 부트캠프 (111)
        • TIL (97)
        • WIL (0)
        • 문제풀이 (7)
        • 기타 (6)
      • 백엔드 부트캠프[사전캠프] (35)
        • TIL (16)
        • 문제풀이 (17)
        • 기타 (1)
      • Troubleshooting (11)
      • 코딩 공부 (118)
        • Java (28)
        • Baekjoon-Java (24)
        • Programmers-Java (40)
        • Spirngboot (11)
        • typescript (1)
        • JavaScript (6)
        • Spring 입문 (8)
      • 프로젝트 (8)
        • ToDoApp(FireBase) (3)
        • ToDoApp(Spring) (5)
      • 기타 (4)
  • 블로그 메뉴

    • 소개
    • Github
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
sintory-04
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이
상단으로

티스토리툴바