MySQL Question - Найдите название и год каждого фильма, который кто-то получил 5 звезд, а кто-то другой - менее 3 звезд. - PullRequest
0 голосов
/ 17 октября 2019

Мне предоставлены три таблицы, одна из которых называется Person, у которой есть идентификатор (первичный ключ) и атрибут name, таблица Movie с заголовком, год (где заголовок и год вместе являются первичным ключом) и, наконец, таблица Saw, которая соединяетдве предыдущие таблицы и имеют первичные ключи, идентификатор, заголовок, год и атрибут numStars (рейтинг человека дал фильм).

Подводя итог:

Таблица персонажа:

id

имя

Таблица фильмов:

название

год

Пильный стол:

id

title

год

numStars

Я не совсем понимаю, как найти фильм с 5-звездочным рейтингом пользователя и менее 3звездный рейтинг пользователя. Я должен делать это как ГДЕ ВНУТРИ, так и с помощью соединения. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 октября 2019

Одним из решений будет использование агрегации и предложение having:

select 
    m.title,
    m.year
from movie m
inner join saw s 
    on s.title = m.title
    and s.year = m.year
group by m.title, m.year
having 
having 
    sum(numStars = 5) >= 1 
    and sum(numStars < 3) >= 1

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

select 
    m.title,
    m.year
from movie m
where
    exists (
        select 1 
        from saw s 
        where 
            s.title = m.title 
            and s.year = m.year
            and s.numStars = 5
    )
    and exists (
        select 1 
        from saw s 
        where 
            s.title = m.title 
            and s.year = m.year
            and s.numStars < 3
    )
...