Witam, chcę wykonać zapytanie które da mi "liste 5 aktorów ktorzy grali w największej ilości filmów"
mam taką bazę.
Patryk Mularczyk napisał(a):
Witam, chcę wykonać zapytanie które da mi "liste 5 aktorów ktorzy grali w największej ilości filmów"
mam taką bazę.
W tabeli AKTOR_FILM zrobć count na ID_FILMU i pogrupuj po ID_AKTORA - bedziesz miał dla kazdego ID_AKTORA ilosc filmów. Połącz z tabela AKTOR zeby wyciagnac dane AKTORA.
Na count(ID_FILMU) zrobc cos w stylu: rank() OVER (ORDER BY count(ID_FILMU)) as rank -- piszę z pamięcie może być coś źle. Będzie miał dla każdego AKTORA, Count(ID_FILMU), RANK -- posortuj po rank zeby zobaczyc czy ok i na koncu warunek daj raunek: rank <= 5.
ok, mam coś takiego:
select DISTINCT aktor.IMIE, aktor.NAZWISKO, aktor.ID_AKTORA, FILM.ID_FILMU, film.TYTUL
from dbo.AKTOR_film inner join dbo.film on dbo.AKTOR_film.ID_FILMU = dbo.FILM.ID_FILMU
inner join dbo.AKTOR on dbo.AKTOR_FILM.ID_AKTORA = dbo.AKTOR.ID_AKTORA" co mi daję:
tylko nie wiem jak to teraz pogrupować aby wyświetlało zsumowaną liczbę filmów przy aktorze
Patryk Mularczyk napisał(a):
ok, mam coś takiego:
select DISTINCT aktor.IMIE, aktor.NAZWISKO, aktor.ID_AKTORA, FILM.ID_FILMU, film.TYTUL
from dbo.AKTOR_film inner join dbo.film on dbo.AKTOR_film.ID_FILMU = dbo.FILM.ID_FILMU
inner join dbo.AKTOR on dbo.AKTOR_FILM.ID_AKTORA = dbo.AKTOR.ID_AKTORA" co mi daję:
tylko nie wiem jak to teraz pogrupować aby wyświetlało zsumowaną liczbę filmów przy aktorze
Zrob cos takiego tlyko przełóż to na swoje tabele:
SELECT
TMP.NAME,
TMP.RANK
FROM
(
SELECT
D.VENDOR_ID AS ID,
D.VENDOR_NAME AS NAME,
COUNT(DISTINCT DD.VENDOR_SITE_ID) COUNT_SITE_ID,
RANK() OVER (ORDER BY COUNT(DISTINCT DD.VENDOR_SITE_ID) DESC) AS RANK
FROM
XX_PO_VENDORS_DS D,
XX_PO_VENDOR_SITES_DS DD
WHERE
D.VENDOR_ID = DD.VENDOR_ID
GROUP BY
D.VENDOR_ID,
D.VENDOR_NAME
ORDER BY
COUNT(DD.VENDOR_SITE_ID) DESC
) tmp
WHERE TMP.RANK <= 5;
Tylko zamiast łączenia w where użyj normalnego joina.
W moim przypadku tabela D i VENDOR_NAME - VENDOR_ID to u Ciebie aktorzy, a count po VENDOR_SITE_ID to count na ID_FILMU.
select a.imie, a.nazwisko, l.ilosc from (select top 5 id_aktora, count(id_aktora) ile from aktor_film group by id_aktora order by count(id_aktora) desc) l inner join aktor a on (l.id_aktora=a.id_aktora)