回答

收藏

如何根据条件删除结果以计算平均电影和特定电影

技术问答 技术问答 281 人阅读 | 0 人回复 | 2023-09-12

我有以下结构。一个简短的解释是:
! u: Z6 R1 X9 L! f: C1 m[ol]鲍勃把这部电影评为5/54 @5 v/ A0 D# Y$ l8 V  i
詹姆斯把电影评为1/5! D' _( N0 M( z1 L- U
梅西把这部电影评为5/5  y5 b* K/ Q8 e1 u( D
没有人评价电影复仇者。[/ol]逻辑:
$ v% \3 ~/ s" q% J[ol]如果我是personA,请找到我阻止的每个人。
* e+ B; W+ x" u* U8 n- T找到所有的电影评论。; N5 Q4 X. v. v0 O' ^" a9 z1 q5 U
留下电影评论personA请从计算中删除已阻止的任何人。: x8 P2 V) m' y6 i8 N
计算电影的平均分数。[/ol]CREATE TABLE movies (  id integer AUTO_INCREMENT primary key, name varchar(100) NOT NULL);CREATE TABLE customer (  id integer AUTO_INCREMENT primary key, name varchar(100) NOT NULL);CREATE TABLE reviews (  id integer AUTO_INCREMENT primary key, rating integer NOT NULL, cus_id integer NOT NULL, movie_id integer NOT NULL, FOREIGN KEY (cus_id) REFERENCES customer(id), FOREIGN KEY (movie_id) REFERENCES movies(id));CREATE TABLE blocked(  id integer AUTO_INCREMENT primary key,    cus_id integer NOT NULL,-- This is the person blocking  blocked_cus_id integer NOT NULL,-- This is the person who is blocked  FOREIGN KEY (cus_id) REFERENCES customer(id), FOREIGN KEY (blocked_cus_id) REFERENCES customer(id));INSERT INTO movies (id,name) VALUES (1,'up(二),avengers');INSERT INTO customer (id,name) VALUES (1,'bob(二),james(3),macy');INSERT INTO reviews (id,rating,cus_id,movie_id) VALUES (1,5、1、1),(2、1、2、1),(3、5、3、1);INSERT INTO blocked (id,cus_id,blocked_cus_id) VALUES (1,1,2);我在这个问题上得到了一些帮助:如何根据条件删除结果来计算平均值(并且声明是正确的),但当我想找到特定电影的评级时,声明只显示在以下条件下。我希望它能展示这部电影,不管它是否有评级。如果没有评分,应该说是0。接下来,电影复仇者联盟没有得分或显示结果。# Z6 b, n- i' B. ]
SELECT m.name,AVG(r.rating) AS avg_ratingFROM movies mINNER JOIN reviews r ON m.id = r.movie_idWHERE NOT EXISTS (SELECT 1 FROM blocked b                  WHERE b.blocked_cus_id = r.cus_id AND b.cus_id = 1)AND m.id = 2GROUP BY m.name;上面的select句子应显示:1 e* ~- j* f! w( e5 v, H
    ---------- ------------ | movie    | avg_rating | ---------- ------------ | avengers |      | ---------- ------------ 当我认为数据库bob时,我应该得到:
4 d; q! C/ F$ t! B" t    ------- ------------ | movie | avg_rating | ------- ------------ | up    |         55 5 5                             55 5 5 5   5                                                                      5 5 5 5 5                                                                   555 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  5 5 5 5 5 5 5 5 5                 5 5 5 5 5 5555                                                        5 5 5 5  5            5 5                              5 5  5                                                                                                                                                                                                  | ------- ------------ 当我将数据库视为Macy时,我应该得到:
7 G# |% i4 z4 u$ v  x# W( O    ------- ------------ | movie | avg_rating | ------- ------------ | up    |      3.67 | ------- ------------                 4 w5 |- E/ `; A0 M+ l7 L0 Z2 W
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则