#sql #oracle #oracle-apex
#sql #Oracle #оракул-апекс
Вопрос:
Я работаю над заданием и застрял на конкретном вопросе. Я новичок в SQL, поэтому обращаюсь к этой платформе за поддержкой. Ниже приведены 2 таблицы. 1-й-таблица театров_игр, а 2-й-таблица продаж билетов. Вопрос: Перечислите названия, режиссеров и сценаристов всех шоу/пьес с наибольшей общей продажей.
Таблица театра_игры
Таблица продажи билетов
Я вставил скриншот какой-то части таблицы. Столбец идентификатора в обеих таблицах представляет одну и ту же информацию. Последний столбец в таблице продаж билетов-Totalamount.
Я пробовал с нижеприведенным запросом; Выберите theatre_play.title, theatre_play.director, theatre_play.writer, sum(totalamount) из theatre_play, итоговые продажи, где theatre_play.id = totalsales.id группа по театру_плея.название, театр_плея.режиссер, Театр_плея.писатель порядок по сумме(totalamount) по запросу только первые 3 строки;
Описанный выше подход бесполезен, когда объем данных огромен. Я хотел применить max(сумма(общая сумма)), но oracle выдал ошибку.
Кто-нибудь, пожалуйста, может помочь мне решить этот вопрос?
Комментарии:
1. Ваше решение кажется мне довольно хорошим!
2. Спасибо. Да, это работает, но я хотел использовать здесь функцию max, но не смог применить.
3. Переместите агрегацию продаж (по
play_id
) в подзапрос и используйтеfetch first 1 rows with ties
, который вернет все самые продаваемые шоу. Затем выполните соединение. Если вы предоставите примеры данных в виде текста, я смогу написать запрос
Ответ №1:
Если я правильно вас понимаю, проблема в том, чтобы получить три самых высоких значения? Тогда попробуйте что-нибудь вроде этого:
select * from ( Select dpro.title, dpro.director, dpro.writer, sum(fth.totalamount) from dpro join fth on dpro.id = fth.id group by dpro.title, dpro.director, dpro.writer order by sum(totalamount) desc ) where rownum lt;=3
Комментарии:
1. Спасибо за ваш ответ. Задача состоит в том, чтобы найти самые высокие продажи — не ограничиваясь никакими. самых высоких ценностей. Я использовал 3 в зависимости от результата. Как я могу сделать это для динамики, где отображаются все самые высокие значения.
2. @Dhwanil вы бы либо удалили предложение where, чтобы получить их все, либо скорректировали его с учетом количества значений
3. @SCCJS, Поэтому, если я удалю предложение where, появятся все значения. В приведенном выше и более раннем подходе я просмотрел данные, а затем решил, что есть только 3 самых высоких значения. Это не идеально, когда данные огромны. Задача состоит в том, чтобы получать только самые высокие значения, не глядя на результат. Я надеюсь, что это уточнит вопросы.
4. @Dhwanil Запрос сортирует выходные данные, начиная с наибольшего значения. Если вы хотите, чтобы все значения были удалены, удалите предложение where. Если вы хотите, чтобы 10 были самыми высокими, замените 3 на 10. Вы говорите, что хотите «высших ценностей». Это, на мой взгляд, не очень четко определено. Это подразумевает, что некоторые из них не соответствуют требованиям и не должны рассматриваться.
5. @Dhwanil когда вы говорите «самые высокие значения», эти значения равны самым высоким? Итак, если у нас будет 100,100,100,10, это вернет 100,100,100? Или вы хотите, чтобы значения были больше, чем в среднем? Кроме этого, мы просто дадим вам x значений