Search code examples
oracle-databasetop-n

Using TOP in ORACLE SQL 9


Hello I'am very new to writing SQL and I am trying to find the appropriate way to use TOP in Oracle SQl 9:

My example:

select * from example e, test t
where e.id = t.id
and country = 'USA'
order by state ASC;

What I am trying to do is take the bottom 20 % of my query but I know you cannot use TOP. After researching I still have not found an applicable answer. I know you have to first order them but am unsure of how to then take the bottom 20%(which would be TOP since the order is ASC)


Solution

  • In general (like if you want the top or bottom 17.2% of the rows) you can use row_number() and count() (analytic functions) to get the result.

    20% is easier - you are looking for the top (or bottom) quintile. For this, you can use the ntile() function, like so:

    select [column_names]
    from (
           select e.*, t.*, ntile(5) over (order by state) as nt
           from .....  etc
         )
    where nt = 1;
    

    The subquery is your query. The column_names in the outer query are whatever you actually need; you could also use select * but that will show the ntile too (which will be 1 in all rows).