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包含姓氏和名字。 任何指导将被预先确定:)
答案 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)