Агрегирование разных значений столбца с другим общим полем - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть 2 таблицы, фильмы (идентификатор, оценка) и приведения (cast_id, movie_id). Мне нужно создать представление, чтобы увидеть пары cast_id, которые были как минимум в 3 фильмах вместе со средним баллом не менее 50. Я не смог выяснить необходимое утверждение select. Это то, что у меня не работает:

SELECT cast_id as cast_member_id1, cast_id as cast_member_id2, 
count(*) as movie_count, avg(score) as average_movie_score 
FROM cast c INNER JOIN movies on movies.id = c.movie_id 
GROUP BY cast_member_id1, cast_member_id2 
HAVING cast_member_id1 < cast_member_id2 AND count(*) >= 3 
AND avg(score) >= 50 
ORDER BY avg(score) LIMIT 10;

1 Ответ

0 голосов
/ 14 сентября 2018

На мгновение расскажу об этих трех строках:

SELECT cast_id as cast_member_id1, cast_id as cast_member_id2
.  
FROM cast c ...
.
HAVING cast_member_id1 < cast_member_id2

Он выбирает столбец из приведения дважды, а затем сравнивает его с собой. ХАЙВИНГ никогда не бывает правдой.

Вы должны начать с лучшего места, чтобы закончить, где вы хотите. Попробуйте это с 2 "копиями" cast.

Что-то вроде:

SELECT c1.cast_id as cast_member_id1, c2.cast_id as cast_member_id2
.
FROM cast c1, cast c2 .....
.
.

И, конечно, вы хотите "присоединиться" к актерам, только если они в одном фильме.

Я не могу гарантировать, что это само по себе исправит запрос. Но это делает вас лучшим стартовым местом.

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