Algorithm / / 2025. 3. 27. 12:50

[LeetCode SQL] 1341: Movie Rating 코드 리뷰 및 분석

LeetCode SQL 1341. Movie Rating 코드 리뷰 및 분석 (요약)

 

쿼리 

# Write your MySQL query statement below

(select name as results
from movierating
join users using(user_id)
group by user_id
order by count(*) desc, name
limit 1)
union all
(select title as results
from (
    select movie_id, rating
    from movierating
    where year(created_at) = 2020 and month(created_at) = 2
) mr
join movies using(movie_id)
group by movie_id
order by avg(rating) desc, title
limit 1);

 

제공해주신 SQL 쿼리는 LeetCode 1341번 문제의 요구사항을 정확히 충족하는 것으로 보입니다. 쿼리에 대한 간략한 리뷰와 분석 결과는 다음과 같습니다.

쿼리 분석

  • 구조: UNION ALL을 사용하여 두 개의 독립적인 결과를 하나로 합칩니다.
    • 첫 번째 SELECT: 가장 많은 영화 평점을 남긴 사용자의 이름을 찾습니다.
      • MovieRating 테이블과 Users 테이블을 user_id로 조인합니다.
      • user_id로 그룹화하여 사용자별 평점 수를 계산합니다.
      • 평점 수(내림차순), 사용자 이름(오름차순 - 동점자 처리) 순서로 정렬합니다.
      • LIMIT 1을 사용하여 최상위 사용자 1명만 선택합니다.
    • 두 번째 SELECT: 2020년 2월에 가장 높은 평균 평점을 받은 영화의 제목을 찾습니다.
      • MovieRating 테이블에서 created_at 기준으로 2020년 2월 데이터만 필터링합니다. (내부 서브쿼리 mr)
      • 필터링된 결과와 Movies 테이블을 movie_id로 조인합니다.
      • movie_id로 그룹화하여 영화별 평균 평점을 계산합니다.
      • 평균 평점(내림차순), 영화 제목(오름차순 - 동점자 처리) 순서로 정렬합니다.
      • LIMIT 1을 사용하여 최상위 영화 1개만 선택합니다.
  • 결과:SELECT문의 결과(name 또는 title)가 results라는 단일 컬럼으로 합쳐져 반환됩니다.

코드 리뷰

  • 정확성: 문제의 요구사항(가장 많은 평점을 남긴 사용자, 2020년 2월 최고 평균 평점 영화)을 정확하게 구현했습니다. 동점자 처리 로직(이름 또는 제목 오름차순 정렬)도 올바르게 적용되었습니다.
  • 가독성: UNION ALL 구조와 각 서브쿼리의 역할이 비교적 명확합니다. 서브쿼리에 별칭(mr)을 사용하여 가독성을 높였습니다.
  • 효율성: 각 서브쿼리에서 GROUP BY, ORDER BY, LIMIT 1을 사용하여 필요한 결과만 효율적으로 추출합니다. 특히 두 번째 쿼리에서 날짜 필터링을 먼저 수행한 후 조인하는 방식은 효율적입니다.
  • 스타일: 표준 SQL 함수(YEAR, MONTH, COUNT, AVG)를 사용했으며, 일반적인 SQL 작성 스타일에 부합합니다.

한 줄 요약 (Nutshell)

  • 제공된 쿼리는 LeetCode 1341번 문제의 두 가지 요구사항(최다 평점자, 2020년 2월 최고 평점 영화)을 UNION ALL을 사용하여 정확하고 효율적으로 해결합니다.
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유