題目
表:Movies
表:Users
?
請你編寫一個解決方案:
- 查找評論電影數量最多的用戶名。如果出現平局,返回字典序較小的用戶名。
- 查找在?
February 2020
?平均評分最高?的電影名稱。如果出現平局,返回字典序較小的電影名稱。
字典序?,即按字母在字典中出現順序對字符串排序,字典序較小則意味著排序靠前。
返回結果格式如下例所示。
示例 1:
?
??
?
解題思路
1.題目要求我們查找評論電影數量最多的用戶名和在?
February 2020
?平均評分最高?的電影名稱,并且按要求返回。對于查詢字段不同的題目,我們可以分別進行查詢后再將兩個答案聯合在一起。2.首先我們查詢評論電影數量最多的用戶名,我們先將movieRating表和users表進行左連接,連接條件是user_id相等,然后我們按照user_id將記錄進行分組,用count(*)計算出每一組的記錄數,使用降序排序,再使用name的字典順序進行排序,返回第一條記錄。
3.其次我們再查詢在?
February 2020
?平均評分最高?的電影名稱,我們也是先將MovieRating表和movie表進行左連接,連接條件是 movie_id 相等,然后將日期規定在‘2020-02’,最后按照movie_id進行分組 計算出每一組的平均值,先按平均值的降序排序,再按title的字典順序排序,返回第一條記錄4.最后我們將查詢到的兩個結果進行聯合,注意這里我們要使用 union all 而不是 union 是因為在使用 union 時,若電影的 title 和觀看者的 name 相同時,只會顯示一條記錄。而 union all 則會全部顯示。?
代碼實現
(select u.name as results
from MovieRating as m
left join users as u
on m.user_id = u.user_id
group by m.user_id
order by count(*) desc, u.name
limit 1)
union all
(select mo.title
from MovieRating as m
left join movies as mo
on m.movie_id = mo.movie_id
where m.created_at like '2020-02%'
group by mo.movie_id
order by avg(m.rating) desc, mo.title
limit 1)
測試結果
?