Форум программистов, компьютерный форум, киберфорум
Наши страницы
MySQL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Insane__
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
1

Self-join

22.03.2014, 19:03. Просмотров 901. Ответов 4
Метки нет (Все метки)

Вывести список всех режиссеров вместе с названием их кинофильма, каторий имеет самый высокий средний рейтинг среди других его фильмов.

Отношение, содержащее информацию о кинофильме - состоит из ID фильма, его названия,
года релиза и кинорежиссера
Movie (mID, title, year, director)
Отношение, содержит информацию о обозревателя состоит из его ID и имени
Reviewer (rID, name)
И отношение, содержащее оценку кинофильма состоит из ID обозревателя, ID кинофильма,
оценки (от 1 до 5) и даты, когда эта оценка была сделана.
Rating (rID, mID, stars, ratingDate)

Я написал запрос возвращающий для каждого фильма его название, директора и средний рейтинг етого фильма. Помогите дописать этот запрос, еще только он остался! Понимаю что нужно использовать self-join для новой таблицы, но что-то не очень получается у меня..
SQL
1
2
3
4
SELECT m.title, m.director, AVG(r.stars) AS avg , m.mID, r.rID FROM Movie m INNER JOIN  Rating r 
                                    ON m.mID = r.mID
                                    WHERE m.director IS NOT NULL 
                                 GROUP BY m.mID
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 19:03
Ответы с готовыми решениями:

Запросы RIGHT JOIN и LEFT JOIN в чём различие?
Добрый день! Чем отличаются запросы RIGHT JOIN и LEFT JOIN, если они выдают...

Необычный join (применить условие where для первой таблицы, а потом where для результата join)
мне нужно прежде чем джоинить, применить условие where для первой таблицы. а...

Like в Inner Join
Скажите, а можно ли использовать Like в конструкции Inner Join, для того, чтобы...

Join VS in
Люди, здравствуйте. До сих пор не знаю, как правильно искать в таблице...

Inner join
Здравствуйте, происходит ошибка при выполнении запроса: SELECT * FROM `users`...

4
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
22.03.2014, 20:31 2
Большие сомнения по поводу того, что этот запрос работает.
Вначале напиши запрос, который выведет среднюю оценку по фильму.
Потом к таблице рижиссеров приджойни этот запрос. И через какой-нибудь row_number() over(partition by director, order by avg_start desc) отбери фильмы с высшим рейтингом
0
Insane__
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
22.03.2014, 20:37  [ТС] 3
Цитата Сообщение от KuKu Посмотреть сообщение
Большие сомнения по поводу того, что этот запрос работает.
Сомнений нет, этот запрос работает!

Цитата Сообщение от KuKu Посмотреть сообщение
Потом к таблице рижиссеров приджойни этот запрос. И через какой-нибудь row_number() over(partition by director, order by avg_start desc) отбери фильмы с высшим рейтингом
Можно с этого места поподробнее? Ну хотя бы пример маленький..
0
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
22.03.2014, 20:54 4
Лучший ответ Сообщение было отмечено Insane__ как решение

Решение

Цитата Сообщение от Insane__ Посмотреть сообщение
Сомнений нет, этот запрос работает!
Показалось, что мы в разделе с ораклом - там этот запрос не будет работать. Какая СУБД?


Добавлено через 13 минут
Судя по всему mysql - это больше нигде не будет работать ) Можно как-то так:
SQL
1
2
3
4
5
6
7
SELECT 
  t1.director, t1.mId 
FROM 
  (ваш_запрос) t1, 
  (SELECT MAX(avg) max_avg, director FROM (ваш_запрос) GROUP BY director) t2 
WHERE 
  t1.director = t2.director AND t1.avg = t2.max_avg
Некрасиво - но работать должно.
0
Insane__
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
22.03.2014, 20:54  [ТС] 5
Цитата Сообщение от KuKu Посмотреть сообщение
Какая СУБД?
MySQL
0
22.03.2014, 20:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2014, 20:54

JOIN
Утро доброе! Смотрю урок по SQL, в нем показывают как можно использовать...

JOIN
Помогите разобраться с оператором join! нужно связать 3 таблицы между собой. 1...

Inner join+LIMIT
Примет всем помогите ребят срочняк! есть запрос SELECT `t1`.`author`,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru