
lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!
SELECT *
from lol_feedbacks
ORDER BY satisfaction_score DESC
lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!
내답
SELECT *
FROM lol_feedbacks
WHERE feedback_date = (select max(), feed back_date)
정답 :
SELECT user_name,
MAX(feedback_date)
FROM lol_feedbacks
GROUP BY user_name
설명 :
1. 유저 별로 니까 유저이름을 찾는다
2. 최신 피드백을 찾는 MAX함수를 찾는다
3. 집계함수 그룹바이절을 사용해서 유저별로 나눈다.
내 오답에 대한 설명
서브쿼리를 작성하고자 했음 그럴려면
SELECT user_name
From lol_feedbacks
WHERE feedback_date = (SELECT MAX(feedback_date) FROM lol_feedbacks)
서브쿼리에 SELECT MAX(구하고자 하는 값) FROM을 붙여서 어디서 추출할건지
이렇게 되면 결과는 가장 최신값만 반환함으로 틀림(1개만)
SELECT *
COUNT(satisfaction_score) = 5
FROM lol_feedbacks
정답:
SELECT COUNT(*)
FROM lol_feedbacks
WHERE satisfaction_score = 5
해석 :
1. 내가 한건 카운트로 직접 5점을 세어보게 하려고했는데 논리충돌 이러난다고함 정확한 이유는 이해를 못하겠음 결론은 비교연산은 SELECT구절에서 안된다. 즉 COUNT는 행을 세는 5하고 맞는지 전체데이터를 비교하는게 안된다.
2. 그럼으로 첫번째는 카운트에서 전체 행을 세어보게하고
3. WHERE 절에서 필터링을 걸어서 5점 을 받은 스코어만 나오게한다.
SELECT user_name
count(*) AS feedback_count
FROM lol_feedbacks
GROUP BY user_name
ORDER BY feedback_count DESC
LIMIT 3
해설
1.먼저 셀렉트문에서 카운트로 다 세아린다.
2. 그다음 그룹바이로 이름별로 정렬(고객을 찾아야하니까)
3. 오더바이로 내림차순 정렬한다
4. 궁금증 뭘 근거로 카운트 함수가 많은 피드백을 한사람을 찾나?
5. 정답은 그룹바이 그룹바이는 무리군을 만들어주는데 혼자있으면 무리군만 만들고 끝
6. 하지만 집계합수인 카운트랑 합치면 그룹바이로 만들어진 무리군을 중심으로 세게된다.
7. 오더바이로 내림차순 정렬했고
8. 리밋으로 상위 3개를 제한했음으로 상위 3명 고객 값이 나온다.
접근 방식
1. 날짜 별 평균 만족도를 구한다
2. 그룹바이로 세티스팩션 스코어를 묶는다 ( 내림차순으로)
3. 리밋으로 제한한다. 1개
또는 맥스 함수를 쓸수 있을것 같기도한데..
SELECT feedback_date
GROUP BY feedback_date
ORDER BY AVG(satisfaction_score) DESC
LIMIT 1
해설
SELECT feedvack_date
group by feedback_date
ORDER BY AVG