Yes buddy, the extra sub querry is needed, as in below case :
select * from <tab> where rownum <=5
order by <a> desc
the first 5 rown are getting sorted and then ordered, which would not essesntaily return max 5 values.
However if we use it as :
select * from (select a from <tbl> order by a DESC) where rownum<=5;
the results are first ordered in desceding order i.e max to lowest and on selecting the frist 5 rows, we get the 5 max values.