2012-02-15 9 views
0
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回以上映画に登場する俳優を迎え入れるはずです。 知っておくべきことは、映画には映画が含まれていて、映画に関連する人物がいくつかある場合は、映画の参加者にパースされます。 p.personidには、姓と名が含まれています。 任意の案内がpreciatedされます:)SQLカウンタのエラー

+1

何が問題なのですか? – Blorgbeard

+0

カウンタはまったく動作していません... –

答えて

1

を行います実際にはfilmテーブルがクエリ内に何もないので、あなたはそれをそのままにしておいてくださいt。また、俳優は1つの映画で複数の役を演じることがあり、したがって、filmparticipationテーブルには、1つの映画につき複数のエントリを持つことができます。これをキャッチするには、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; 
+0

PostgreSQLでは、言うことはできません:HAVING films> = 50 – user265767

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 
0

(count) >= 50 

または

50 <= (count)