[TIL] SQL RANK / MAX

NayeonKim·2025년 4월 29일

[TIL] 한땀한땀 SQL

목록 보기
1/4
post-thumbnail

Today I learned 💭

  • RANK 함수
  • 목적: 순위를 매겨줌
  • 문법: RANK() OVER (ORDER BY 정렬기준 DESC/ASC)
  • MAX 함수
  • 목적: 최대값 구할 때 MAX 함수 활용!
    집계함수라서 항목별로 구할때 LIMIT 보다 꿀🍯🐝
  • 문법: MAX (컬럼명)
  • 오늘의 쿼리 공부
    1. lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)

      <내 쿼리 >
      SELECT name
      			,rating
      FROM lol_users
      ORDER BY rating DESC
      
      <정답쿼리>
      SELECT name
      			,rating
      			,RANK() OVER (ORDER BY rating DESC) AS lol_rank
      FROM lol_users;
    2. lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요!

      SELECT name
      FROM lol_users
      ORDER BY join_date DESC
      LIMIT 1
    3. lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!

      SELECT region
      			,name
      FROM lol_users
      ORDER BY rating DESC
      GROUP BY region
      
      * 지역별로 정렬 해야 하기 때문에 ORDER BY 에 region이랑 rating 함께 넣어줌
      * 집계함수가 아니기 때문에 GROUP BY 는 필요 없음
    4. lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!

      SELECT region
      			,AVG(rating)
      FROM lol_users
      GROUP BY region
    5. lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!

      SELECT  *
      FROM lol_feedbacks
      ORDER BY satisfation_score DESC
      
    6. lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!

      SELECT user_name
      			,MAX(feedback_date)
      FROM lol_feedbacks
      GROUP BY user_name
      
      ** 각 유저별로 최대값을 구할 때는 SELECT 구문에 MAX 함수를 활용한다. 
      ** ORDER BY feedback_date DESC LIMIT 1을 작동하지 않음. 유저가 다 다르기 때문에
    7. lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!

      SELECT COUNT(*)
      FROM lol_feedbacks
      WHERE satisfaction_score = 5;
      
    8. lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!

      SELECT user_name
      			,COUNT(*) AS cnt_feedback
      FROM lol_feedbacks
      GROUP BY user_name
      ORDER BY COUNT(*) DESC
      LIMIT 3
    9. lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!

      SELECT feedback_dadte
      			,AVG(satisfacion_score)
      FROM lol_feedbacks
      ORDER BY AVG(satisfaction_score) DESC
      LIMIT 1;
profile
그로스마케터 성장일지 🐕

0개의 댓글