Для этой задачи я должен найти все имена актеров, которые участвовали в более чем 50 фильмах. В каждом фильме я должен проверить, что их фамилия стоит на первом месте в алфавите вместе с другими актерами в фильме.
select
lastname, firstname, count(*) as films
from
(select
distinct p.lastname, p.firstname, f.filmid
from
person p, filmparticipation f, filmitem i, film fi
where
fi.filmid = i.filmid and
i.filmid = f.filmid and
p.personid = f.personid and
f.parttype = 'cast' and filmtype = 'C') person
group by
lastname, firstname
having
count(*) >= 450
order by
lastname, firstname desc;
Вот несколько соответствующих таблиц, касающихся запроса
create table person(
personid int primary key,
lastname text not null,
firstname text not null,
gender(1),
);
create index personlastnameindex on person (lastname);
create table filmparticipation (
partid int primary key,
personid int not null references person (personid),
filmid int not null references filmitem (filmid),
parttype text not null
);
create index filmparticipationpersonidindex on filmparticipation (personid);
create index filmparticipationpersonidindex on filmparticipation (filmid);
create table film(
filmid int primary key references filmitem (filmid),
title text not null,
prodyear int
);
create index filmtitleindex on film (title);
create index filmyearindex on film (prodyear);
Некоторые пояснения относительно некоторых типов фильмов =>
C => cinema movie V => videomovie VG => videogame TV => TV-film.....
Как мне на самом деле заставить его проверить, что человек идет первым в алфавите против других актеров?
Пример => Художественная фантастика ... (есть несколько других актеров, но они принимают главные роли)
Сэмюэл Л. Джексон || Джон Траволта Легко понять, что Джексон идет перед Траволтой, так что +1 для Джексона и т. Д. ...
Я видел псевдокод, который выглядит как min (p.lastname в этом фильме) или p.lastname <= all (p.lastname в фильме) </p>
Как я могу использовать любой из них? Или это лучше?