1341. Movie Rating : leetcode

오유찬·2026년 1월 13일

SQL

목록 보기
43/71
  • 가장 많은 수의 리뷰를 남긴 리뷰어를 찾아라. (동률이라면, 사전학적으로 더 빠른 사람의 이름)
  • February 2020에 가장 높은 평점의 영화 제목을 찾아라. 동률이면 사전학적으로 더 빠른 영화의 이름
  • 1,2 의 결과는 results 테이블로 출력
-- -- 1. 가장 많은 수의 리뷰를 남긴 리뷰어를 찾아라. (동률이라면, 사전학적으로 더 빠른 사람의 이름)
-- -- 2. February 2020에 가장 높은 평점의 영화 제목을 찾아라. 동률이면 사전학적으로 더 빠른 영화의 이름
-- -- 1,2 의 결과는 results 테이블로 출력

WITH CTE AS (
        SELECT user_id, COUNT(*) as cnt
        FROM    MovieRating
        GROUP BY
                user_id),
    reviewer AS (
        SELECT  user_id
        FROM    CTE
        WHERE   cnt = (SELECT  MAX(cnt) FROM CTE)
        ),
    result_1 AS (
        SELECT  name as results
        FROM    Users
        WHERE   user_id IN (SELECT user_id FROM reviewer)
        ORDER BY   
                name ASC
        LIMIT   1
        ),
    movie_rate AS (
        SELECT  movie_id, AVG(rating) as avg_rate
        FROM    MovieRating
        WHERE   DATE_FORMAT(created_at, "%Y-%m") = "2020-02"
        GROUP BY   
                movie_id
        ORDER BY
                avg_rate DESC
        ),
    rating_high AS (
        SELECT  movie_id
        FROM    movie_rate
        WHERE   avg_rate = (SELECT MAX(avg_rate) FROM movie_rate )
    ),
    result_2 AS (
        SELECT  title
        FROM    Movies
        WHERE   movie_id IN (SELECT movie_id FROM rating_high)
        ORDER BY
                title ASC
        LIMIT   1
    )

SELECT  results FROM    result_1
UNION ALL
SELECT  title   FROM    result_2

최대한 자잘하게 쪼개보려고 이렇게 진행했다.
이제까지 SQL 문제를 풀면서 집계 함수를 ORDER BY절에 사용을 잘 안 했는데, 이를 활용하면 적은 쿼리로 문제를 풀 수 있다.

ORDER BY절이 쿼리 상 맨 마지막으로 실행되기 때문에, 이미 계산이 된 집계 함수는 결과를 알고 있어서 정렬 기준으로 사용이 가능하다.

profile
열심히 하면 재밌다

0개의 댓글