算在HAVING?

时间:2017-03-27 04:19:27

标签: mysql sql

我想回答的问题是,每部至少获得一个等级大于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;

3 个答案:

答案 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