Growth ๐ŸŒณ/Practice ๐Ÿ’ป

[Leet code] 1341. Movie Rating

์ธ” 2023. 9. 22. 19:24

๐Ÿ“ข ๋ณธ ํฌ์ŠคํŒ…์— ํ™œ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋ฌธ์ œ ๋ฐ ์ž๋ฃŒ ์ถœ์ฒ˜๋Š”

       ๋ฆฌํŠธ์ฝ”๋“œ Problems, https://leetcode.com/problemset/all/์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค.


โœ”๋ฌธ์ œ

https://leetcode.com/problems/movie-rating/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

Table : Movies

Table : Users

Table : MovieRating

Write a solution to:

  • Find the name of the user who has rated the greatest number of movies. In case of a tie, return the lexicographically smaller user name.
  • Find the movie name with the highest average rating in February 2020. In case of a tie, return the lexicographically smaller movie name.

โœ” ํ’€์ด

  ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ  

๊ฐ ํ…Œ์ด๋ธ” ์ •๋ณด๋ฅผ ์ข…ํ•ฉํ•˜์—ฌ

๊ฐ€์žฅ ๋งŽ์€  ์˜ํ™”๋ฅผ ํ‰๊ฐ€ํ•œ ์œ ์ €์˜ ์ด๋ฆ„ (=A) ๊ณผ

2020๋…„ 2์›”์— ๋‹ฌ๋ฆฐ ๋ฆฌ๋ทฐ์ค‘ ํ‰๊ท  ํ‰์ ์ด ๊ฐ€์žฅ ๋†’์€ ์˜ํ™”์˜ ์ด๋ฆ„ (=B) ์„

results ๋ผ๋Š” ํ•œ ์ปฌ๋Ÿผ์— ์ถœ๋ ฅํ•˜๋˜ ๋‘ ๊ฐ’ ๋ชจ๋‘ ๋™์ผํ•œ ์ˆ˜์น˜์˜ ์ค‘๋ณต๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์ „์ˆœ(์˜ค๋ฆ„์ฐจ์ˆœ) ๊ธฐ์ค€์œผ๋กœ 1๊ฐœ์”ฉ๋งŒ ์ถ”์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

โ‘  ๋จผ์ € Movie Rating ํ…Œ์ด๋ธ” ๊ธฐ์ค€์œผ๋กœ Movies ์™€ Users ํ…Œ์ด๋ธ” ์ •๋ณด๋ฅผ left join ํ•ด์„œ ๋ชจ๋“  ์˜ํ™” ํ‰์  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์˜ํ™” ์ •๋ณด์™€ ๋ฆฌ๋ทฐ๋ฅผ ๋‹จ ์œ ์ € ์ •๋ณด๊นŒ์ง€ ํฌํ•จ๋˜๋„๋ก ํ•œ ํ›„

โ‘ก A๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด

    ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•„์ด๋””๋กœ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋ฆฌ๋ทฐ๋ฅผ ๋‹ฌ๊ณ  ์ด๋ฆ„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ฒซ๋ฒˆ์งธ์ธ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ถ”์ถœ.

โ‘ข B๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด

    ์˜ํ™” ์•„์ด๋””์™€ ์ œ๋ชฉ์œผ๋กœ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ํ‰๊ท  ํ‰์ ์ด ๊ฐ€์žฅ ๋†’์œผ๋ฉด์„œ ์ด๋ฆ„์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ฒซ๋ฒˆ์งธ์ธ ์˜ํ™” ์ด๋ฆ„์„ ์ถ”์ถœ.

   (๋‹จ, B๊ฐ’ ์ „์ œ์กฐ๊ฑด์ธ 2020๋…„ 2์›” ๋ฆฌ๋ทฐ์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ๋‚ ์งœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐ๊ฑด์„ ์ ์šฉํ•ด์ฃผ๊ธฐ)

โ‘ฃ ์ดํ›„ โ‘ก + โ‘ข์„ UNION ALL ์ฒ˜๋ฆฌํ•ด์คฌ๋‹ค.

 

โ€ป ์ฒ˜์Œ์—๋Š” UNION์„ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ์˜ํ™”์ด๋ฆ„=์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต ์ œ๊ฑฐ๋กœ 1๊ฐœ๋งŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

(SELECT US.name AS results
  FROM MovieRating MR
  LEFT JOIN Movies MI
  ON MR.movie_id = MI.movie_id

  LEFT JOIN Users US
  ON MR.user_id = US.user_id

  GROUP BY MR.user_id, US.name
  ORDER BY COUNT(*) DESC, US.name ASC
  LIMIT 1)

UNION ALL

(SELECT MI.title AS results
  FROM MovieRating MR
  LEFT JOIN Movies MI
  ON MR.movie_id = MI.movie_id

  LEFT JOIN Users US
  ON MR.user_id = US.user_id

  WHERE DATE_FORMAT(MR.created_at, '%Y-%m') = '2020-02'
  GROUP BY MR.movie_id, MI.title
  ORDER BY AVG(MR.rating) DESC, MI.title ASC
  LIMIT 1);