给定3个表我必须找到这个特定的查询,我该怎么做?

时间:2017-08-01 07:36:32

标签: mysql sql

我有一个家庭作业问题。

给出数据库中的表:

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?

2 个答案:

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

看看,它可能会有所帮助