如何从表中提取第二高的行

use*_*270 0 sql oracle oracle11g greatest-n-per-group

我有四张桌子:

  1. 批处理(batch_id,batch_start_date,batch_strength,course_id)
  2. 课程(course_id,course_name,course_category,course_fees,course_duration)
  3. 注册(batch_id,student_id,enrollment_date)
  4. 学生(student_id,student_name,student_mail,student_date_of_birth,student_city,student_phone,student_qualification)

现在根据问题,我必须展示收入第二高的coursename

根据上面的问题,这是我的解决方案

select c.course_name, c.course_fees*count(c.course_name) Total_Revenue
from course c join(batch b join enrollment e 
on b.batch_id=e.batch_id) 
on c.course_id=b.course_id
group by c.course_name, c.course_fees
order by Total_Revenue desc ;
Run Code Online (Sandbox Code Playgroud)

现在问题是我无法从上面的代码中从结果表中提取第二行.如何从上面生成的表中提取第二行?(特别感谢Oracle 11g的答案)

Gor*_*off 5

用途row_number():

select *
from (select c.course_name, c.course_fees*count(c.course_name) as Total_Revenue,
             row_number() over (order by c.course_fees*count(c.course_name)) as seqnum
      from batch b join
           enrollment e 
           on b.batch_id = e.batch_id join
           course c
           on c.course_id=b.course_id
      group by c.course_name, c.course_fees
     ) bec
where seqnum = 2;
Run Code Online (Sandbox Code Playgroud)

如果您可以先获得并且仍然想要第二名,那么请使用dense_rank()而不是row_number().