SQL연습문제

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

Twisted 2024. 8. 28. 15:57

아래와 같은 lol_feedbacks (LOL 피드백 테이블)이 있습니다.

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
  1. lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!
  2. lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!
  3. lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!
  4. lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!
  5. lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!

 

A1. //만족도 점수가 같은경우 날짜는 먼저 일어난 사건부터 보이도록 feedback_date ASC를 추가

SELECT * FROM lol_feedbacks
ORDER BY satisfaction_score DESC, feedback_date ASC;

 

 A2. //JOIN, ON절을 이용

SELECT lf.*  FROM lol_feedbacks lf
INNER JOIN(
SELECT user_name, MAX(feedback_date) latest_date
FROM lol_feedbacks
GROUP BY user_name
) latest_feedback
ON lf.user_name = latest_feedback.user_name
AND lf.feedback_date = latest_feedback.latest_date;

 

A3.

SELECT COUNT(*)
FROM lol_feedbacks
WHERE satisfaction_score = 5;

 

A4.

SELECT user_name, COUNT(*) feedback_count
FROM lol_feedbacks
GROUP BY user_name
ORDER BY feedback_count DESC
LIMIT 3;

 

A5.

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