You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SELECTtmp1.resultsFROM (
SELECT
name results, count( MovieRating.user_id ) numberFROM MovieRating,Users
WHEREMovieRating.user_id=Users.user_idGROUP BYUsers.nameORDER BYnumberDESC, NAME ASCLIMIT1
) tmp1
UNION ALLSELECTtmp2.resultsFROM (
SELECTMovieRating.movie_id, title results, avg( rating ) max_rating
FROM MovieRating, Movies
WHEREMovieRating.movie_id=Movies.movie_idAND created_at LIKE"2020-02%"GROUP BY title
ORDER BY max_rating DESC, title LIMIT1
) tmp2
方法二
使用窗口函数对结果进行排序,然后取第一条数据
先将 MovieRating 表和 Users 表进行连接,得到每个用户的评分次数
通过 user_id 关联
按照 user.name 分组,就可以计算评分的次数了
按照评分次数降序,name 升序排序
使用 rank() 函数对结果进行排序,得到每个用户的排名
产出 name 和 ranking 两个数据
再将 MovieRating 表和 Movies 表进行连接,得到每部电影的平均评分
通过 movie_id 关联,并且筛选出 2020-02 月份的数据
按照 title 分组,就可以计算每部电影的平均评分了
按照平均评分降序,title 升序排序
使用 rank() 函数对结果进行排序,得到每部电影的排名
产出 name 和 ranking 两个数据
将两次查询的结果用 union all 合并起来,作为临时表 tmp
从临时表 tmp 中取出排名为 1 的数据
SELECT
results
FROM (
SELECT
name results,
rank() over ( ORDER BYcount( 1 ) DESC, name ) ranking
FROM
MovieRating, Users
WHEREMovieRating.user_id=Users.user_idGROUP BY name
UNION ALLSELECT
title results,
rank() over ( ORDER BYavg( rating ) DESC, title ) ranking
FROM
MovieRating, Movies
WHEREMovieRating.movie_id=Movies.movie_idAND created_at LIKE"2020-02%"GROUP BY Moviestitle
) tmp
WHEREtmp.ranking=1
The text was updated successfully, but these errors were encountered:
题目
题目链接:电影评分
请你编写一个解决方案:
查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。
查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。
字典序 ,即按字母在字典中出现顺序对字符串排序,字典序较小则意味着排序靠前。
返回结果格式如下例所示。
解析
本题考察的知识点是使用
union all
将两张表结果合并起来MySQL
中判断判断日期的五种方法:DATE_FORMAT(created_at, '%Y-%m') = '2020-02'
YEAR(created_at) = 2020 AND MONTH(created_at) = 2
created_at BETWEEN '2020-02-01' AND '2020-02-29'
created_at LIKE '2020-02%'
DATE_FORMAT(created_at, '%Y-%m') = DATE_FORMAT('2020-02-01', '%Y-%m')
方法一
MovieRating
表和Users
表进行连接,得到每个用户的评分次数user_id
关联user.name
分组,就可以计算每个用户评分次数了name
升序排序tmp1
MovieRating
表和Movies
表进行连接,得到每部电影的平均评分movie_id
关联,并且筛选出2020-02
月份的数据title
分组,就可以计算每部电影的平均评分了title
升序排序tmp2
name
和第二步查询出来的title
命令为results
union all
即可方法二
使用窗口函数对结果进行排序,然后取第一条数据
MovieRating
表和Users
表进行连接,得到每个用户的评分次数user_id
关联user.name
分组,就可以计算评分的次数了name
升序排序rank()
函数对结果进行排序,得到每个用户的排名name
和ranking
两个数据MovieRating
表和Movies
表进行连接,得到每部电影的平均评分movie_id
关联,并且筛选出2020-02
月份的数据title
分组,就可以计算每部电影的平均评分了title
升序排序rank()
函数对结果进行排序,得到每部电影的排名name
和ranking
两个数据union all
合并起来,作为临时表tmp
tmp
中取出排名为1
的数据The text was updated successfully, but these errors were encountered: