SQL计数器失败

时间:2012-02-15 17:11:30

标签: sql postgresql

  select lastname, firstname
    from person 
    group by lastname, firstname
    having 50 >= 
                (select count(p.personid) from filmparticipation x, film f, person p
                 where f.filmid = x.filmid and
                 x.personid = p.personid and
                 x.parttype = 'cast'
               );

简短介绍,这是基于电影数据库。通过这个查询,我应该让电影中的演员超过50次。 要知道的细节,电影包含filmid,然后解析为filmparticipation,其中有一些与电影有关的人物。 p.personid包含姓氏和名字。 任何指导将被预先确定:)

3 个答案:

答案 0 :(得分:2)

试一试......我相信子查询是不必要的:

select p.lastname, p.firstname, count(*)
from person p
join filmparticipation x on p.personid = x.personid
join film f on x.filmid = f.filmid
where x.parttype = 'cast'
group by p.lastname, p.firstname
having count(*) > 50

答案 1 :(得分:1)

对于查询中的任何内容,您实际上不需要film表,因此您可以将其保留。你还应该记住,演员可以在一部电影中扮演多个角色,因此在filmparticipation表格中每部电影可以有多个条目。要捕获此信息,请使用带有DISTINCT的子查询。

SELECT lastname, firstname, COUNT(*) AS films
FROM (SELECT DISTINCT p.lastname, p.firstname, f.filmid
    FROM person p, filmparticipation f
    WHERE p.personid = f.personid AND f.parttype = 'cast') p
GROUP BY lastname, firstname
HAVING films >= 50;

答案 2 :(得分:0)

(count) >= 50 

50 <=  (count)