728x90
25. lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!
SELECT * FROM lol_feedback ORDER BY satisfaction_score DECS; |
26. lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!
WITH feedbacks_date AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY feedback_date DESC) AS rn FROM lol_feedbacks )SELECT * FROM feedbacks_date WHERE rn = 1; |
27. lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!
SELECT COUNT(*) AS feedback_count FROM lol_feedbacks WHERE satisfaction_score = 5; |
28. lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!
SELECT name, COUNT(*) AS feedback_count FROM lol_feedbacks GROUP BY name ORDER BY feedback_count DESC LIMIT 3; |
29. lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!
SELECT feedback_date, AVG(satisfaction_score) AS avg_score FROM lol_feedbacks GROUP BY feedback_date ORDER BY avg_score DESC LIMIT 1; |
풀이
26번
1) 서브쿼리 방식
먼저, 각 유저의 최신 피드백을 구하기 위해 lol_feedbacks 테이블에서 name 별로 가장 최근 날짜의 피드백을 찾습니다. 서브쿼리 안에서 각 유저별로 MAX(feedback_date)를 계산하고, 메인 쿼리에서 이 값과 일치하는 피드백을 가져옵니다.
SELECT * FROM lol_feedbacks AS f1 WHERE f1.feedback_date = ( SELECT MAX(f2.feedback_date) FROM lol_feedbacks AS f2 WHERE f1.name = f2.name ); |
설명:
lol_feedbacks 테이블의 name를 기준으로 각 유저의 최신 피드백을 찾는 구조입니다.
서브쿼리(SELECT MAX(f2.feedback_date) ...)는 각 유저의 name에 대해 가장 최신의 feedback_date를 찾습니다.
메인 쿼리에서는 lol_feedbacks 테이블에서 이 최신 날짜와 일치하는 피드백을 출력합니다.
2) 윈도우 함수 방식
ROW_NUMBER()
각 유저별로 피드백을 날짜별로 순서화하고, 그중 첫 번째 피드백을 가져오는 방식입니다.
WITH feedbacks_date AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY feedback_date DESC) AS rn FROM lol_feedbacks )SELECT * FROM feedbacks_date WHERE rn = 1; |
설명:
WITH 절을 사용해 feedbacks_date라는 임시 테이블을 생성합니다. 이 테이블은 각 유저의 피드백을 날짜별로 순서를 매긴 결과입니다.
ROW_NUMBER() 함수는 각 name 그룹 내에서 feedback_date를 내림차순으로 정렬해 순번을 부여합니다. 가장 최신 피드백은 순번이 1이 됩니다.
마지막 SELECT 문에서는 rn = 1 조건을 걸어 각 유저의 최신 피드백만 가져옵니다.
출처
26번 : https://m.blog.naver.com/regenesis90/222184066546, https://schatz37.tistory.com/46
'내일배움 과제 > 기타 과제' 카테고리의 다른 글
걷기 SQL - 9)아프면 안됩니다! 항상 건강 챙기세요! (0) | 2024.10.21 |
---|---|
걷기반 SQL - 8) LOL을 하다가 홧병이 나서 병원을 찾아왔습니다. (0) | 2024.10.21 |
걷기반 SQL - 6) 팀 프로젝트 열심히 했으니 다시 놀아볼까요?! (0) | 2024.10.18 |
걷기반 SQL - 5) 공부하다보니 팀 프로젝트 시간이 왔어요! (0) | 2024.10.17 |
걷기반 SQL - 4) 이제 놀만큼 놀았으니 다시 공부해봅시다! (0) | 2024.10.17 |