我如何计算值在何处后的列数?

问题描述 投票:1回答:1

[我需要执行一个查询,其中必须显示电影的标题和最受好评的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或类似名称的表中都没有字段,因此,评价的数量是对同一部电影进行评分的用户数量。

sql postgresql select
1个回答
1
投票

您需要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子句中使用逗号。

© www.soinside.com 2019 - 2024. All rights reserved.