Да бред какой-то, а если актеры 3 и 7 снимались в С ? То что? А если они все трое и ещё один снимались в Г??? Где четкое определение как сортировать фильмы? Нет Не то где максимальное количество самых высокооплачиваемых, не то по совокупности веса этих актеров... Понятно что задание тестовое, но возможно в том и тест чтоб не путаться с недостаточными даными решать задачу
Я думал, что я настолько дурак, а тут оказывается и на специализированном форуме решить задачу не могут.
Вопрос не в решении - а в постановке задачи. Вы адекватно сформулируйте - что значит отсортировать в порядке актеров, с учетом того что в каждом фильме множество актеров и они могут повторятся.
Я не сам придумал. А скопировал постановку задачи из задания. К том же, если уж я понял задание, то в постановке задачи все очень просто. Даже ответ мне специально написали, что бы не запутаться. Отсортировать фильмы в порядке участия в них самых высокооплачиваемых актеров, что не понятно здесь? В ответе первым идем фильм D, потому как в нем снимались актеры 3, 7 и 5, они же являются самыми высокооплачиваемыми, и так далее.
допустим есть фильм Г - где снимались артисты 3, 7 которые тоже самые высокооплачиваемые, но их меньше - где этот фильм будет? Или есть фильм П - где снимались 3, 7, 5 и например еще один артист из четверки самых высокооплачиваемых - его куда ставить в вашем ранге. Я не говорил что вы сами придумали - понимаю что задание готовое. А адекватного объяснения - что такое порядок участия в фильме - нет.
Я понял ваш вопрос. Сортировка фильмов должна быть по количеству общей зарплаты актеров, которые снимались в этом фильме.
Опять же не совсем точно.... в одном фильме например снимались 2 топовых артиста с общей зарплатой в 1000, в другом 10 нетоповых но с общей зарплатой в 1500.... Если то что вы пишете надо, зачем веcь сыр-бор по определению топовых артистов? Взять фильмы сджойнить суммы за фильм и так отсортировать, не? Код (Text): SELECT films.*, SUM(film_actors.fee) AS summ FROM films LEFT JOIN film_actors ON films.id = film_actors.film_id GROUP BY films.id ORDER BY summ ASC
Нет. из второй таблицы видно, что в каждом фильме снималось по три актера, не больше. Но больше всего заработали актеры 3, 7 и 5 за все фильмы где они снимались. Они же все трое снимались в фильме D, соответственно этот фильм на первом месте, что совпадает с ответом, который дан к заданию
Ну.... Мало ли что сейчас видно. Делать решение под конкретный ограниченный набор данных - минимум некошерно, максимум нерабочее решение. С такой формулировкой задачи - нафиг..
https://www.db-fiddle.com/f/dND57fvKJFMyPSuufje7ki/0 Код (SQL): SELECT films.*, SUM(x.sum_fee) AS sum_fee FROM films JOIN film_actors ON film_actors.film_id = films.id JOIN ( SELECT actor_id, SUM(fee) AS sum_fee FROM film_actors GROUP BY actor_id ) AS x ON x.actor_id = film_actors.actor_id GROUP BY films.id ORDER BY sum_fee DESC --- Добавлено --- или без подзапроса https://www.db-fiddle.com/f/dND57fvKJFMyPSuufje7ki/1 Код (SQL): SELECT films.*, SUM(film_actors.fee) AS sum_fee FROM films JOIN film_actors ON film_actors.film_id = films.id GROUP BY films.id ORDER BY sum_fee DESC --- Добавлено --- разница в том, что первый считает сумму гонораров актеров по всем фильмам где они участвовали второй считает сумму гонораров по конкретному фильму. --- Добавлено --- есть замечание по возможности группировки с "*" во фразе select: в MySQL есть разные уровни строгости соответствия стандарту SQL. важно понимать, что все поля в выдаче должны функционально зависеть от группируемого(ых) поля(ей)! см. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
@artoodetoo - все здорово, но каков смысл данного запроса выраженный человеческим языком? Список фильмов, отсортированный по суммарному заработку (во всех фильмах) всех участвующих актеров в данном фильме?
Это вроде переменной, куда потом подставляется это выражение? AS x ON x.actor_id = film_actors.actor_id
@ADSoft если ты можешь читать по английски, просто прочти его. SQL создавался как ограниченное подмножество английского языка для операций с множествами. --- Добавлено --- В какой-то момемент перестаёшь относиться к нему как к шаманству и начинаешь просто думать категориями множеств. Это не объяснить в одном коментарии, надо нарабатывать навык. --- Добавлено --- "AS" это назначение псевдонима (алиас) таблице или подзапросу чтобы потом ссылаться на него. подзапрос используется точно также, как обычная таблица, но у подзапроса нет имени пока ты не назначишь ему имя через "AS".
В том-то и дело, что могу, и формулировка запроса не совпадает с изначальной постановкой задачи. Отсюда вывод, что или формулировка кривая, либо решение не совпадает с задачей