Как использовать max on sum в oracle sql?

#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 значений