我想回答的问题是,每部至少获得一个等级大于4并且预算超过20,000,000美元的电影的总收入是多少?
返回每部电影的标题,预算和总销售额 将表设置为:
Movies_Table :movie_id,movie_name,release_year,gross_sales,预算
Actor_Table :actor_id,actor_name,agent,date_of_birth
Casting_Table :casting_id,movie_id,actor_id,角色(1 =潜在客户,2 =支持)
Reviews_Table :reviews_id,reviewer_name,movie_id,rating(1,2,3,4或5)
我写的代码就是这个,但我不确定我能否使用COUNT。
我是否可以像在此处显示的那样使用HAVING来获得上述结果?
SELECT m.movie_name, m.budget, m.gross_sales
FROM Movies_Table as m
JOIN Reviews_Table as rev on m.movie_id = rev.movie_id
WHERE m.budget >= 20000000
HAVING(COUNT(rev.rating >= 4)) > 0;
答案 0 :(得分:2)
使用SUM
代替COUNT
因为条件的结果将为0或1.此外,添加相关的group by子句。
这样的事情:
select m.movie_name,
m.budget,
m.gross_sales
from Movies_Table as m
join Reviews_Table as rev on m.movie_id = rev.movie_id
where m.budget >= 20000000
group by m.movie_name,
m.budget,
m.gross_sales
having sum(rev.rating >= 4) > 0;
答案 1 :(得分:1)
由于您只需要表格中的值而不是连接,您可以使用下面的sql。
我已经为oracle写了这个sql。 语法可能会根据您的数据库服务器而更改。
SELECT m.movie_name, m.budget, m.gross_sales
FROM Movies_Table as m
WHERE m.budget >= 20000000
AND exists (select 'x' from Reviews_Table as rev
where m.movie_id = rev.movie_id
and rev.rating >= 4)
答案 2 :(得分:-1)
试试这个......
select m.movie_name,
m.budget,
m.gross_sales
from Movies_Table as m
join Reviews_Table as rev on m.movie_id = rev.movie_id
where m.budget >= 20000000 and rev.rating >= 4
group by movie_name