Неверный ответ в My_ SQL Query - PullRequest
0 голосов
/ 10 июля 2020

Моя задача: «Подсчитать количество фильмов за каждый год, в которых снимались только женщины-актеры».

Схема таблицы следующая:

--------------------   -----------------------   ----------------------
|       Movie      |   |     Person           |  |       Cast         |
--------------------   ------------------------  ----------------------
| MID    |   year  |   |  PID     |   Gender  |  |    MID   |    PID  |
--------------------   ------------------------  ----------------------

Я написал следующее MySQL Запрос:

SELECT m.year, COUNT(m.MID) AS Movies_Female FROM Movie m
        WHERE m.MID IN ( SELECT Q.MID FROM ( SELECT m_c.MID, COUNT(m_c.PID) AS No_Actors FROM M_Cast m_c GROUP BY m_c.MID) Q 
        WHERE Q.No_Actors = ( SELECT COUNT(m__c.PID) FROM M_Cast m__c JOIN PERSON p 
        ON TRIM(p.PID) = TRIM(m__c.PID)
        WHERE m__c.MID = Q.MID AND TRIM(p.Gender) = 'Female')) GROUP BY m.year

Но и я получаю результат как:

    year    Movies_Female
0   1939        1
1   1999        1
2   2000        1
3   2009        1
4   2012        1
5   2018        1

Но когда я вручную проверяю 2009 и 2012 год, у меня нет Mov ie где есть только актрисы. Пожалуйста, определите, где мой запрос идет не так?

1 Ответ

2 голосов
/ 10 июля 2020

Вы можете использовать not exists для фильтрации фильмов, в которых есть хотя бы один актер не женского пола:

select m.year, count(*) as movies_female 
from movie m
where not exists (
    select 1 
    from cast c
    inner join person p on p.pid = c.pid
    where c.mid = m.mid and p.gender <> 'Female'
)
group by m.year

Это предполагает, что каждый mov ie имеет хотя бы одну запись в cast (что здесь кажется разумной гипотезой).

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