Mysql 如何从数据库中选择收视率最高的前10部电影?

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

我是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, 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()