Skip to main content
Back to problems
#1341
Medium Database

Movie rating

Database
42.8% acceptance
Feb 27, 2026
974
237
Table: Movies +---------------+---------+ | Column Name | Type | +---------------+---------+ | movie_id | int | | title | varchar | +---------------+---------+ movie_id is the primary key (column with unique values) for this table. title is the name of the movie. Each movie has a unique title. Table: Users +---------------+---------+ | Column Name | Type | +---------------+---------+ | user_id | int | | name | varchar | +---------------+---------+ user_id is the primary key (column with unique values) for this table. The column 'name' has unique values. Table: MovieRating +---------------+---------+ | Column Name | Type | +---------------+---------+ | movie_id | int | | user_id | int | | rating | int | | created_at | date | +---------------+---------+ (movie_id, user_id) is the primary key (column with unique values) for this table. This table contains the rating of a movie by a user in their review. created_at is the user's review date. 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. The result format is in the following example.

Solution

SQL
LeetCode
solution.sql
#
# Table: Movies
# +---------------+---------+
# | Column Name   | Type    |
# +---------------+---------+
# | movie_id      | int     |
# | title         | varchar |
# +---------------+---------+
# movie_id is the primary key (column with unique values) for this table.
# title is the name of the movie.
# Each movie has a unique title.
# Table: Users
# +---------------+---------+
# | Column Name   | Type    |
# +---------------+---------+
# | user_id       | int     |
# | name          | varchar |
# +---------------+---------+
# user_id is the primary key (column with unique values) for this table.
# The column 'name' has unique values.
# Table: MovieRating
# +---------------+---------+
# | Column Name   | Type    |
# +---------------+---------+
# | movie_id      | int     |
# | user_id       | int     |
# | rating        | int     |
# | created_at    | date    |
# +---------------+---------+
# (movie_id, user_id) is the primary key (column with unique values) for this table.
# This table contains the rating of a movie by a user in their review.
# created_at is the user's review date.
# 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.
# The result format is in the following example.
# Example 1:
# Input:
# Movies table:
# +-------------+--------------+
# | movie_id    |  title       |
# +-------------+--------------+
# | 1           | Avengers     |
# | 2           | Frozen 2     |
# | 3           | Joker        |
# +-------------+--------------+
# Users table:
# +-------------+--------------+
# | user_id     |  name        |
# +-------------+--------------+
# | 1           | Daniel       |
# | 2           | Monica       |
# | 3           | Maria        |
# | 4           | James        |
# +-------------+--------------+
# MovieRating table:
# +-------------+--------------+--------------+-------------+
# | movie_id    | user_id      | rating       | created_at  |
# +-------------+--------------+--------------+-------------+
# | 1           | 1            | 3            | 2020-01-12  |
# | 1           | 2            | 4            | 2020-02-11  |
# | 1           | 3            | 2            | 2020-02-12  |
# | 1           | 4            | 1            | 2020-01-01  |
# | 2           | 1            | 5            | 2020-02-17  |
# | 2           | 2            | 2            | 2020-02-01  |
# | 2           | 3            | 2            | 2020-03-01  |
# | 3           | 1            | 3            | 2020-02-22  |
# | 3           | 2            | 4            | 2020-02-25  |
# +-------------+--------------+--------------+-------------+
# Output:
# +--------------+
# | results      |
# +--------------+
# | Daniel       |
# | Frozen 2     |
# +--------------+
# Explanation:
# Daniel and Monica have rated 3 movies ("Avengers", "Frozen 2" and "Joker") but Daniel is smaller lexicographically.
# Frozen 2 and Joker have a rating average of 3.5 in February but Frozen 2 is smaller lexicographically.
#

# Write your MySQL query statement below

(SELECT u.name AS results
FROM Users u
JOIN MovieRating mr ON u.user_id = mr.user_id
GROUP BY u.user_id, u.name
ORDER BY COUNT(*) DESC, u.name ASC
LIMIT 1)
UNION ALL
(SELECT m.title AS results
FROM Movies m
JOIN MovieRating mr ON m.movie_id = mr.movie_id
WHERE mr.created_at BETWEEN '2020-02-01' AND '2020-02-29'
GROUP BY m.movie_id, m.title
ORDER BY AVG(mr.rating) DESC, m.title ASC
LIMIT 1);