Mysql SQL查询帮助从多个表中选择
我不知道如何完成这个查询 问题是: “对于2010年出演电影的每个人,请找到他们的名字 以及他们出演的所有电影的总片酬(即包括 那些不是在2010年。” 所需表格:(其中title=电影片名,year=电影年,Pay=演员薪酬) 到目前为止,我的问题是:Mysql SQL查询帮助从多个表中选择,mysql,sql,Mysql,Sql,我不知道如何完成这个查询 问题是: “对于2010年出演电影的每个人,请找到他们的名字 以及他们出演的所有电影的总片酬(即包括 那些不是在2010年。” 所需表格:(其中title=电影片名,year=电影年,Pay=演员薪酬) 到目前为止,我的问题是: SELECT A.name, A.pay FROM ActedIn A WHERE A.year = 2010; 这将返回: +--------+--------+ | Name | Pay | +--------+--------
SELECT A.name, A.pay FROM ActedIn A WHERE A.year = 2010;
这将返回:
+--------+--------+
| Name | Pay |
+--------+--------+
| Dino | 12.22 |
+--------+--------+
| Miro | 1238.22|
+--------+--------+
但是,这只会返还该演员在2010年拍摄的特定电影所获得的报酬
现在我有了我想查找的演员的名字,我需要它来查找他们制作的所有其他电影(2010年之前或之后),并将他们拍摄的所有电影的总收入加起来
我知道我需要再做一个表格来找到这两位演员演过的所有电影,然后合并我认为是的专栏
有什么帮助吗?您可以通过一个聚合和
拥有子句来实现这一点:
select name, sum(pay)
from actedin
where name in (select name from actedin where year = 2010)
group by name
select ai.name, sum(ai.pay)
from actedin ai
group by ai.name
having sum(case when ai.year = 2010 then 1 else 0 end) > 0;
having
子句统计每个“名字”在2010年出演的电影数量。如果此数字大于0,则保留结果集的名称。您也可以将exists与子查询一起使用
select name, sum(pay)
from actedin a
where exists (select 1 from actedin b where a.name = b.name and year = 2010)
group by name
您不需要另一个表,但您确实需要使用子查询。您不需要子查询。可能“需要”不是最好的词,但是对于这样一个简单的问题,最好的解决方案是使用子查询。@ShWiVeL否。最好的解决方案是使用连接。为什么我们要假设使用内联视图进行连接会比这更快?我们没有可以确定这一点的信息。
select name, sum(pay)
from actedin a
where exists (select 1 from actedin b where a.name = b.name and year = 2010)
group by name