[사전캠프] SQL 연습문제 - 7

2024. 8. 22. 00:38내일배움캠프

문제 : 문제 설명

id user_name satisfaction_score feedback_date
1 르탄이 5 2023-03-01
2 배캠이 4 2023-03-02
3 구구이 3 2023-03-01
4 이션이 5 2023-03-03
5 구구이 4 2023-03-04

[lol_feedbacks(LOL 피드백) 테이블]

Q1. 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리 작성

SELECT *
FROM lol_feedbacks
ORDER BY satisfaction_score

 

 ORDER BY 를 사용해 만족도 점수를 기준으로 테이블을 내림차순 정렬하였다.

 

Q2. 각 유저별 최신 피드백을 찾는 쿼리 작성

SELECT user_name, MIN(feedback_date) recent_feedback_date
FROM lol_feedbacks
GROUP BY 1

 

 GROUP BY 로 'user_name' 컬럼을 그룹화하고 MIN 함수를 통해 각 그룹별 'feedback_date' 의 최소 값을 'recent_feedback_date' 에 출력하는 쿼리를 작성하였다.

 

Q3. 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리 작성

SELECT COUNT(1) score_five 
FROM lol_users
WHERE satisfaction_score = 5

 

 WHERE 절로 'satisfaction_score' 가 '5' 인 레코드들만 추린 후 COUNT 를 사용해 모든 레코드의 개수를 'score_five' 컬럼으로 출력하는 쿼리 작성

 

Q4. 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리 작성

SELECT user_name, COUNT(1) feedback_count
FROM lol_feedbacks
GROUP BY 1
ORDER BY 2 DESC
LIMIT 3

 

 'user_name' 을 그룹화해 각 그룹별 레코드 개수를 COUNT 로 연산 'feedback_count' 에 출력 해당 테이블을 'feedback_count' 가 많은 순으로 정렬하기 위해 내림차순 정렬, 상위 3개 레코드를 출력하기 위해 LIMIT 를 사용해 결과를 출력하였다.

 

Q5. 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리 작성

SELECT feedback_date
FROM
(
SELECT feedback_date, AVG(satisfaction_score) avg_score
FROM lol_users
GROUP BY 1
ORDER BY 2 DESC
) sub
LIMIT 1

 

 서브 쿼리를 통해 'feedback_date' 별 평균 만족도 점수(avg_score)가 높은 순으로 정렬된 결과 테이블을 구하고, 해당 테이블의 첫 번째(상위) 레코드의 'feedback_date' 를 출력하는 쿼리를 작성했다.