[我需要执行一个查询,其中必须显示电影的标题和最受好评的5部超过2000票的电影的平均价格。
要执行该查询,请从下表中处理(值已经导入):
DROP TABLE IF EXISTS Film CASCADE;
CREATE TABLE Film(
id_film INT,
title VARCHAR(255),
year INT,
PRIMARY KEY(id_film)
);
DROP TABLE IF EXISTS User CASCADE;
CREATE TABLE User (
id_user INT,
gender VARCHAR(255),
postal_code VARCHAR(255),
id_ocupation INT,
PRIMARY KEY(id_user),
FOREIGN KEY(id_ocupation) REFERENCES Ocupation(id_ocupation),
);
DROP TABLE IF EXISTS User_Film;
CREATE TABLE User_Film (
id_film INT,
id_user INT,
rating INT,
timestamp INT,
PRIMARY KEY(id_film, id_user),
FOREIGN KEY (id_film) REFERENCES Film(id_film),
FOREIGN KEY (id_user) REFERENCES User(id_user)
);
而且我尝试执行以下查询。该查询工作正常,但如何按价位过滤输出?
select title, avg(rating)
from User U,
Film P,
User_Film UP
where UP.id_user = U.id_user
AND UP.id_film = P.id_film
group by title
order by avg(rating) desc
limit 5;
我还猜测(由于在任何名为number_of_valorations或类似名称的表中都没有字段,因此,评价的数量是对同一部电影进行评分的用户数量。
您需要having
子句:
select title, avg(rating)
from User U join
User_Film UP
on UP.id_user = U.id_user join
Film P
on UP.id_film = P.id_film
group by title
having count(*) >= 2000
order by avg(rating) desc
limit 5;
学习使用正确的,明确的标准 JOIN
语法。 从不在FROM
子句中使用逗号。