sql - 如何计算一个值在 Where 之后的列数?
问题描述
我需要执行一个查询,我必须在其中显示电影的标题以及获得超过 2000 票的前 5 部评分最高的电影的平均估值。
要执行该查询,我从下表中处理(已导入值):
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)
);
我已经尝试执行以下查询。查询工作正常,但是,我怎样才能按 valorations 的数量过滤输出?
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 或类似名称的表中都没有字段),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
子句中使用逗号。
推荐阅读
- r - 使用 R 进行 2D 投影的 3D 表面
- mysql - MySQL 触发器:使用 IF 语句插入新表但出现重复项
- tensorflow - SageMaker:可视化训练统计
- r - r - 创建函数来计算数据集中过滤行的计数
- python - 通过python中的下拉菜单打开文件
- swagger - swagger-codegen 引用了一个不存在的 Java 类
- python - Python绑定C++虚成员函数不能调用
- apache-kafka - 消息在 spout 和 bolt 之间掉线
- python - 如何使用给定的一组正确的故障样本图像来检测给定图像是否正确
- python - Python创建条形图比较2组数据