내배캠 15회차

포도당·2025년 5월 14일
0

예제 7번

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

  2. 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개만)

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

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점 을 받은 스코어만 나오게한다.

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

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. lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!

접근 방식
1. 날짜 별 평균 만족도를 구한다
2. 그룹바이로 세티스팩션 스코어를 묶는다 ( 내림차순으로)
3. 리밋으로 제한한다. 1개

또는 맥스 함수를 쓸수 있을것 같기도한데..

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

해설

  1. 날짜별로 묶어야함. 그럼으로 그룹바이를 써야함 단순히 묶어주는 용도가 아니라
  2. 오더바이 에버리지로 정렬기준을 만들어줌 결과를 꼭 보여줄 필요가없음
  3. 만약 그룹바이가 없으면 어떤 날짜 "기준"인지 모르기때문에 에러가 남.

SELECT feedvack_date
group by feedback_date
ORDER BY AVG

새로알게된 사실

  1. 그룹바이는 집계함수가 사용될때 필수로 써줘야함
  2. 집계함수의 결과를 "어떤" 기준으로 찾을지를 알려줘야함
  3. 오더바이는 결과의 정렬만을 찾음으로 생략가능한 경우가 많음
  4. 결과물에는 간섭안하고 보여주는 순서만 영향끼침으로.
profile
어디까지 성장할 것 인가..!

0개의 댓글