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
을 사용하여 정확하고 효율적으로 해결합니다.
'Algorithm' 카테고리의 다른 글
[LeetCode SQL] 585: Investments in 2016 - 코드 리뷰 및 분석 (0) | 2025.03.29 |
---|---|
[LeetCode SQL] 1321: Restaurant Growth 코드 리뷰 및 분석 (0) | 2025.03.27 |
[16234] 인구 이동 문제 리뷰 및 코드 개선 (0) | 2025.03.22 |
[13460] 구슬 탈출 2 문제 리뷰 및 코드 개선 (0) | 2025.03.04 |
[5373] 큐빙 문제 리뷰 및 코드 개선 [미해결] (0) | 2025.03.03 |