Wyświetl tytuły i rok produkcji filmów, w których zagrało dokładnie 2 aktorow. Muszę napisać kod.Moze ktos ms pomysł?
0
3
Jakiś schemat bazy może. Czy mamy zgadywać z fusów?
3
Ok, potrzebujesz:
- zwrócić kolumny z interesującymi Cię informacjami (zgaduję, że dwie) - coś w stylu
SELECT <to co chcę> FROM <tam skąd chcę> ....
, nie ma wielkiej filozofii - jeśli masz, a prawie na pewno masz, kilka tabel z różnymi informacjami o filmach, aktorach, rolach etc. to trzeba je jakoś złączyć ze sobą i zebrać do kupy - od tego masz
..... <jakaś tabela> JOIN <inna tabela> ....
. Ponieważ "brak filmu" albo "brak aktora" średnio ma sens w tym kontekście, to pewnieINNER JOIN
będzie najbardziej sensowny - nie potrzebujesz informacji o aktorach, a jedynie o tym ilu ich było, więc zapewne wystarczy złączyć np. filmy i role, z ról wyjąć klucze identyfikujące aktora i film i dopilnować, żeby nie było duplikatów (bo akurat jakiś aktor miał dwie role w jednym filmie niczym Cezary Żak w Ranczo) - pewnie gdzieś po drodze wskoczy
DISTINCT
. Możliwe że pomocne będzie złączenie tabeli z filmami z jakimś podzapytaniem na rolach, a nie gołą tabelą - coś w stylu:.... INNER JOIN (SELECT DISTINCT ... FROM <tabela z rolami>) AS <jakaś tymczasowa nazwa> ...
- takie bezwarunkowe złączenie
tak o
skończy się tak, że dopasujesz każdy film z każdym aktorem, a to raczej nie ma sensu, potrzebny jest jakieś kryterium, a skoro mamy filmy i role to pewnie identyfikator filmu w obu tabelach powinien być taki sam:... ON <klucz z tabeli z filmami> = <klucz filmu z tabeli z rolami> ...
- jak już masz potrzebne kolumny, wiesz który aktor grał w którym filmie, nie masz duplikatów i masz poprawne złączenie, trzeba jeszcze zliczyć wystąpienia aktorów dla każdego filmu. Najłatwiej będzie pogrupować wynik
JOIN
a po identyfikatorze filmu - od tego jest... GROUP BY <to po czym grupujesz> ...
- chcesz też zliczyć aktorów dla każdego filmu - wynik masz już pogrupowany wg. filmów, więc "pod spodem" zagregowanych jest wiele rekordów dla danego filmu, odpowiadających poszczególnym aktorom. Wystarczy je zliczyć używając
COUNT(...)
- masz zwrócić informacje o filmach z konkretną liczbą aktorów, więc potrzebny jest warunek. W przypadku grupowania możesz użyć
.... HAVING <warunek>
. Warunkiem jest liczba aktorów równa 2, więc będzie to coś w stylu.... HAVING COUNT(...) = 2
No i z tych kawałków poskładasz już gotowe zapytanie :)
2
Аліса Єреемєєва napisał(a):
Muszę napisać kod.
Nie krępuj się, Albercik, pisz, pisz...
Moze ktos ms pomysł?
pewnie, że ktoś ma jakiś pomysł
0
Ja mam pomysł
select tytul, rokProdukcji
from
(select f.tytul, f.rokProdukcji, count(af.idAktora)
from
filmy f
join aktorzyFilmy af on af.idFilmu
group by f.tytul, f.rokProdukcji
having count(af.idAktora) = 2) as Widok