use*_*270 0 sql oracle oracle11g greatest-n-per-group
我有四张桌子:
现在根据问题,我必须展示收入第二高的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的答案)
用途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().