我有一个家庭作业问题。
给出数据库中的表:
M_Cast(ID,MID,PID)
,其中ID是主键。
Person(PID,Name,DOB,Gender)
其中PID是主键。
Movie(MID,title,year)
MID是主要的,
我必须回答如下问题的查询:找出2005年参与过更多电影的演员比其他任何一年都要多。
使用mysql。
我正在尝试这样做:
select distinct(PID),Name
from M_Cast natural join Person natural join Movie
where (*query1*)
> (*query2*);
所以现在query1是每个演员在2005年完成的电影数量,而query2是每个演员在2005年以外的任何一年中完成的最大电影数量。所以我想知道如何回答query2?
答案 0 :(得分:1)
一种方式:
SELECT Person.* from Person
inner join (
select PID from (
select M_Cast.PID as PID, Movie.year as year, count(*) as cnt from Movie
inner join M_Cast
on Movie.MID = M_Cast.MID
group by M_Cast.PID, Movie.year
) t
group by PID
having max(case when year = 2005 then cnt else 0 end) > max(case when year <> 2005 then cnt else 0 end)
) tt
on Person.PID = tt.PID
答案 1 :(得分:0)
试试这个:
select m.year, count(*) num_of_movies, p.PID from Movie m inner join
M_Cast mc on m.MID = mc.MID inner join Person p on p.PID = mc.PID
group by m.year order by num_of_movies DESC, m.year DESC
如果你只想要2005年,那么你可以添加where条件m.year ='2005'
对于query2:
这样做 ;with query2 as (select m.year, count(*) num_of_movies, p.PID from Movie
m inner join
M_Cast mc on m.MID = mc.MID inner join Person p on p.PID = mc.PID
where m.years <> '2005'
group by m.year order by num_of_movies DESC, m.year DESC)
select distinct(PID),Name from M_Cast natural join Person natural join
Movie where (*query1*) = (select Max(num_of_movies) from query2)
看看,它可能会有所帮助