imdb 数据集 select 根据年份的电影计数,其中只有女性演员的电影
imdb dataset select movie count according to year with movies with only female cast
报告每年只有女性演员的电影的百分比,以及当年制作的电影总数。例如,一个答案是:1990 31.81 13522 表示 1990 年有 13,522 部电影,其中 31.81% 的电影只有女性演员。您不需要四舍五入您的答案。
以下代码
select a.year, a.c*100.00/b.c as percentage, b.c as total_overall
from (select z.year, count(*) as c
from movie z
where not exists (select *
from person x,M_cast xy
where x.pid = xy.pid and xy.mid = z.mid and x.Gender!='Female')
group by z.year) a,
(select z.year, count(*) as c from movie z group by z.year) b
where a.year=b.year
order by a.year;
以下代码无效
select z.year, count(*)
from movie z
where not exists (select *
from actor x, casts xy
where x.id = xy.pid and xy.mid = z.id and x.gender!='F')
group by z.year;
请告诉我如何查询只有女性的电影select
以下输出我得到
指导我如何select只有女性演员的电影
如何为上述语句编写sql查询
您可以使用两个聚合级别:
select movie_year, count(*) no_movies, avg(has_male_actor = 0) ratio
from (
select m.year movie_year, max(p.gender = 'Male') has_male_actor
from movie m
inner join m_cast mc on mc.mid = m.mid
inner join person p on pid = mc.pid
group by m.mid, m.year
) t
group by movie_year
子查询为每部电影生成一行,并带有一个标志,指示是否有男性演员出现在演员阵容中。然后,外部查询按年份聚合,并计算只有女性演员的电影的数量和比例(表示为 0
和 1
之间的十进制数)。
@gmb 给出的答案是正确的,因为他不知道您的数据是否包含任何噪声,并且他根据您在上面图像中提到的模式编写了查询。但是当我遇到同样的问题陈述时,我 运行 它发现电影 table 的年份列在它前面包含一些 spaces and roman values
像:- 'I 1945' 和之后一些修改,它 运行s 在你提到的 'IMDB movies DB'
和 returns 上成功地得到了正确的结果。
这是针对上述问题陈述的修改后的查询:-
select movie_year, count(*) no_movies, avg(has_male_actor = 0)*100 ratio
from (
select CAST(SUBSTR(m.year,-4) AS UNSIGNED) movie_year, max(p.gender = 'Male') has_male_actor
from movie m
inner join m_cast mc on TRIM(mc.mid) = TRIM(m.mid)
inner join person p on TRIM(p.pid) = TRIM(mc.pid)
group by m.mid, m.year
) t
group by movie_year
以下代码
select a.year, a.c*100.00/b.c as percentage, b.c as total_overall
from (select z.year, count(*) as c
from movie z
where not exists (select *
from person x,M_cast xy
where x.pid = xy.pid and xy.mid = z.mid and x.Gender!='Female')
group by z.year) a,
(select z.year, count(*) as c from movie z group by z.year) b
where a.year=b.year
order by a.year;
以下代码无效
select z.year, count(*)
from movie z
where not exists (select *
from actor x, casts xy
where x.id = xy.pid and xy.mid = z.id and x.gender!='F')
group by z.year;
请告诉我如何查询只有女性的电影select
以下输出我得到
指导我如何select只有女性演员的电影
如何为上述语句编写sql查询
您可以使用两个聚合级别:
select movie_year, count(*) no_movies, avg(has_male_actor = 0) ratio
from (
select m.year movie_year, max(p.gender = 'Male') has_male_actor
from movie m
inner join m_cast mc on mc.mid = m.mid
inner join person p on pid = mc.pid
group by m.mid, m.year
) t
group by movie_year
子查询为每部电影生成一行,并带有一个标志,指示是否有男性演员出现在演员阵容中。然后,外部查询按年份聚合,并计算只有女性演员的电影的数量和比例(表示为 0
和 1
之间的十进制数)。
@gmb 给出的答案是正确的,因为他不知道您的数据是否包含任何噪声,并且他根据您在上面图像中提到的模式编写了查询。但是当我遇到同样的问题陈述时,我 运行 它发现电影 table 的年份列在它前面包含一些 spaces and roman values
像:- 'I 1945' 和之后一些修改,它 运行s 在你提到的 'IMDB movies DB'
和 returns 上成功地得到了正确的结果。
这是针对上述问题陈述的修改后的查询:-
select movie_year, count(*) no_movies, avg(has_male_actor = 0)*100 ratio
from (
select CAST(SUBSTR(m.year,-4) AS UNSIGNED) movie_year, max(p.gender = 'Male') has_male_actor
from movie m
inner join m_cast mc on TRIM(mc.mid) = TRIM(m.mid)
inner join person p on TRIM(p.pid) = TRIM(mc.pid)
group by m.mid, m.year
) t
group by movie_year