второй максимальный сбор - PullRequest
0 голосов
/ 10 апреля 2020

Напишите запрос для отображения идентификатора курса и названия курса, который имеет вторую максимальную плату. Если существует более двух курсов, сортируйте их, используя идентификатор курса.

enter image description here

Я пытался использовать функцию лимита, но она не работает. Это помощь, которую они дали "MySQL поддерживает предложение LIMIT", чтобы выбрать ограниченное количество записей, в то время как Oracle использует ROWNUM. ROWNUM, однако, имеет ограничения, так как вы не можете выбрать конкретную строку по вашему выбору, кроме row1. Поскольку вы находитесь на oracle, пожалуйста, напишите внутренний подзапрос (скажем, s1), который возвращает максимальные сборы. Напишите также внешний подзапрос (скажем, s2), который возвращает максимальные сборы. s2! = s1 вернет второй максимум. Попробуйте эту логику c и возвращайтесь за разъяснениями, если таковые имеются.

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020
select * from courses where fee = (
    select max(fee) from courses where fee <
        (select max(fee) from courses)
)
order by courseid;
0 голосов
/ 10 апреля 2020

это должно работать с использованием dense_rank(), вы можете посмотреть здесь http://sqlfiddle.com/#! 18 / d8c73 / 4

select
  course_id,
  course_name,
  fees
from
(    select
      *,
      dense_rank() over (order by fees) as rnk
   from courses
) t
where rnk = 2
0 голосов
/ 10 апреля 2020

Вы можете попробовать это ниже logi c. Это будет работать только в том случае, если для каждого курса доступны уникальные тарифы.

SELECT * 
FROM
(
    SELECT courseid,courseName,Fees
    FROM Course
    ORDER BY Fees DESC
    LIMIT 2 
) A
ORDER BY Fees
LIMIT 1

Но если есть возможность иметь больше курсов с одинаковыми тарифами, попробуйте следующее:

SELECT * FROM COURSE
WHERE Fees = 
(
    SELECT MIN(Fees)
    FROM
    (
        SELECT DISTINCT Fees
        FROM Course
        ORDER BY Fees DESC
        LIMIT 2
    )A
)
...