홍동이의 성장일기

[LeetCode] 1341. Movie Rating (Union vs. Union All) 본문

Tool/SQL 코딩테스트 풀이

[LeetCode] 1341. Movie Rating (Union vs. Union All)

홍동2 2024. 1. 3. 00:53

 

Movie Rating - LeetCode

Can you solve this real interview question? Movie Rating - Table: Movies +---------------+---------+ | Column Name | Type | +---------------+---------+ | movie_id | int | | title | varchar | +---------------+---------+ movie_id is the primary key (column w

leetcode.com

 

(SELECT u.name as results
 FROM movierating mr
     INNER JOIN users u
     ON mr.user_id = u.user_id
 GROUP BY u.name
 ORDER BY count(mr.rating) DESC, u.name
 LIMIT 1)

UNION ALL

(SELECT m.title as results
 FROM movierating as mr
     INNER JOIN movies as m
     ON mr.movie_id = m.movie_id
 WHERE DATE_FORMAT(created_at, '%Y-%m') = '2020-02'
 GROUP BY m.title 
 ORDER BY AVG(mr.rating) DESC, m.title
 LIMIT 1)

 

💡 문제 풀이

 

1️⃣ 가장 많은 영화를 평점한 사용자의 이름을 찾는다.

SELECT u.name as results
FROM movierating mr
    INNER JOIN users u
    ON mr.user_id = u.user_id
GROUP BY u.name
ORDER BY count(mr.rating) DESC, u.name
LIMIT 1

 

2️⃣ 2020년 2월에 평균 평점이 가장 높은 영화 이름을 찾는다.

SELECT m.title as results
FROM movierating as mr
    INNER JOIN movies as m
    ON mr.movie_id = m.movie_id
WHERE DATE_FORMAT(created_at, '%Y-%m') = '2020-02'
GROUP BY m.title 
ORDER BY AVG(mr.rating) DESC, m.title
LIMIT 1

 

3️⃣ 구한 값을 UNION ALL 하여 합쳐준다.

 

📍 UNION vs. UNION ALL

  • UNION: 중복된 ROW 제거
  • UNION ALL: 중복 제거X

 

➡️ 이 문제에서 UNION을 해주면 오류가 발생하는데, 그 이유는 영화 이름과 사용자의 이름이 겹치는 경우가 발생하기 때문이다. 따라서 UNION ALL을 사용하여 중복이 발생하는 경우에도 제거되지 않도록 해주어야 한다.

 

 

 

 

 

 

 

728x90
Comments