Mysql 如何从数据库中选择收视率最高的前10部电影?
我是MySQL的新手,很难运行复杂的查询。 我有两张桌子 电影表Mysql 如何从数据库中选择收视率最高的前10部电影?,mysql,rdbms,Mysql,Rdbms,我是MySQL的新手,很难运行复杂的查询。 我有两张桌子 电影表 CREATE TABLE movies (movieid int(4) NOT NULL PRIMARY KEY, title varchar(255) NOT NULL, genres varchar(255) NOT NULL); CREATE TABLE ratings (userid int(4) NOT NULL, movieid int(4) NOT NULL, rating int(1) NOT NULL, t
CREATE TABLE movies (movieid int(4) NOT NULL PRIMARY KEY,
title varchar(255) NOT NULL,
genres varchar(255) NOT NULL);
CREATE TABLE ratings (userid int(4) NOT NULL, movieid int(4) NOT NULL,
rating int(1) NOT NULL, timestamp int(10) NOT NULL ADD CONSTRAINT FK_ratings
FOREIGN KEY(movieid) REFERENCES movies(movieid));
评级表
CREATE TABLE movies (movieid int(4) NOT NULL PRIMARY KEY,
title varchar(255) NOT NULL,
genres varchar(255) NOT NULL);
CREATE TABLE ratings (userid int(4) NOT NULL, movieid int(4) NOT NULL,
rating int(1) NOT NULL, timestamp int(10) NOT NULL ADD CONSTRAINT FK_ratings
FOREIGN KEY(movieid) REFERENCES movies(movieid));
我想获得排名前十的电影片名;
这就是我对这个问题的理解程度:
SELECT title
FROM movie m
JOIN (
SELECT movieid, COUNT(movieid)
FROM ratings)
ON m.movieid = r.movieid
LIMIT BY 10
我一直得到
1
作为回应 问题是由计数(movieid)
引起的。它基本上统计所有的行。使联接的ratings表侧仅为1行。您需要的是按对它进行分组,这样您就可以对每个电影ID进行单独的评级计数
试试这个:
SELECT title
FROM movie m
JOIN (
SELECT movieid, COUNT(movieid)
FROM ratings GROUP BY movieid)
ON m.movieid = r.movieid
LIMIT 10
缺少两点:
- 按movie.movieid分组以获取计数
- 正在获取最大计数,但未列出该计数
查询(评级数量):
查询(平均评分)
这里不需要外部连接
SELECT m.title, SUM(r.rating) / COUNT(m.movieid)
FROM movies m
INNER JOIN ratings r ON m.movieid = r.movieid
GROUP BY m.movieid
ORDER BY 2 DESC
LIMIT 0, 10
应该是-->LIMIT 10I’m get some每个派生表都必须有自己的别名
error这会返回前10名吗?前10名电影的收视率最高,但如果要根据平均收视率排序,则必须将max(COUNT())更改为max(SUM(ratings.rating)/COUNT()