Сбой счетчика SQL - PullRequest
       3

Сбой счетчика SQL

0 голосов
/ 15 февраля 2012
  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, а затем анализируется для участия в фильме, где есть несколько персон, связанных с фильмом.p.personid содержит фамилию и имя.Любое руководство будет уточнено:)

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

Дайте этому шанс ... Я думаю, подзапрос был ненужным:

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 голос
/ 15 февраля 2012

Вам на самом деле не нужна таблица 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;
0 голосов
/ 15 февраля 2012

до

(count) >= 50 

или

50 <=  (count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...