[LeetCode-SQL 50] 1341. Movie Rating

코린이·2025년 6월 15일

SQL 문제 풀이 (MySQL)

목록 보기
85/96

❓ 문제

Movies
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| movie_id      | int     |
| title         | varchar |
+---------------+---------+
movie_id는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
title은 영화의 이름입니다.


Table: Users
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int     |
| name          | varchar |
+---------------+---------+
user_id는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
'name' 열에는 고유한 값이 있습니다.


Table: MovieRating
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| movie_id      | int     |
| user_id       | int     |
| rating        | int     |
| created_at    | date    |
+---------------+---------+
(movie_id, user_id)는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
이 테이블에는 사용자가 리뷰에 남긴 영화의 평점이 포함되어 있습니다.
created_at는 사용자의 리뷰 날짜입니다.

가장 많은 수의 영화에 별점을 준 사용자의 이름을 찾습니다. 동점인 경우 사전적으로 더 작은 사용자 이름을 반환합니다.

2020년 2월에 평균 평점이 가장 높은 영화 이름을 찾습니다. 동점일 경우 사전적으로 더 작은 영화 이름을 반환합니다.

자세한 문제 내용은 사이트 참고...


❗️ 문제 풀이

with tmp_tb1 as (
    select
        B.name as results
        , count(A.user_id) as not_use_col
    from MovieRating A join Users B
        on A.user_id = B.user_id
    group by B.name
    order by not_use_col desc, B.name asc
    limit 1
), tmp_tb2 as (
    select
        A.title as results
        ,avg(B.rating) as not_use_col
    from Movies A join MovieRating B
        on A.movie_id = B.movie_id
    where DATE_FORMAT(B.created_at, '%Y-%m') = '2020-02'
    group by A.movie_id
    order by not_use_col desc, A.title asc
    limit 1
)
select results from tmp_tb1  -- 가장 많은 수의 영화에 별점을 준 사용자
union all
select results from tmp_tb2  -- 2020년 2월에 평균 평점이 가장 높은 영화 이름
;

🔗 Reference

https://leetcode.com/problems/movie-rating/description/?envType=study-plan-v2&envId=top-sql-50

0개의 댓글