【发布时间】:2019-10-31 09:57:06
【问题描述】:
我需要编写一个 SQL 查询来返回所有电影的平均评分,这些电影中的每一个都是“浪漫”而不是“喜剧”。
下面是我的表格列表-->
create table genres (genreid int,
name text,
primary key(genreid));
create table ratings(userid int,
movieid int,
rating numeric check(rating<=1 OR rating<=5),
timestamp bigint,
PRIMARY KEY (userid,movieid),
FOREIGN KEY (userid) REFERENCES users (userid),
FOREIGN KEY (movieid) REFERENCES movies (movieid));
create table hasagenre( movieid int,
genreid int,
FOREIGN KEY (movieid) REFERENCES movies (movieid),
FOREIGN KEY (genreid) REFERENCES genres (genreid));
我尝试了下面的代码,但得到了错误的答案
FROM ratings R,hasagenre H1,hasagenre H2,genres G1,genres G2
WHERE R.movieid=H1.movieid AND H1.genreid=G1.genreid
AND R.movieid=H2.movieid AND H2.genreid=G2.genreid
AND (G2.name <> 'Comedy' AND G1.name = 'Romance');
预期平均值:3.7429411764705882 实际结果:3.7458333333333333
如果我想获得所有电影的平均评分,并且每部电影都是“浪漫”和“喜剧”,那么上面的代码可以通过将 'Comedy 替换为 ='Comedy' 来正常工作
【问题讨论】:
-
今日提示:使用现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 -
提示:GROUP BY、HAVING、COUNT()
-
你能拥有
(Romance, Terrror)并符合平均水平吗?
标签: sql postgresql join