Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get second largest or third largest entry from a table [duplicate]

Tags:

sql

oracle

max

Can anyone please tell me how to find out the N th largest entry from a table in Oracle?

Like for largest we can use MAX(column_name) is there any efficient way to find nth largest also?

like image 258
Ninja Avatar asked Dec 19 '10 13:12

Ninja


3 Answers

You can find the Nth largest value of a column by using the following query

SELECT * 
FROM TableName a 
WHERE n = (
           SELECT count( DISTINCT (b.ColumnName) )
           FROM TableName b 
           WHERE a.ColumnName <= b.ColumnName 
          );
like image 150
Abhishek B Patel Avatar answered Oct 24 '22 05:10

Abhishek B Patel


SELECT *
FROM (
  SELECT some_column, 
         row_number() over (order by your_sort_column desc) as row_num
  FROM some_table
) t
WHERE row_num = 3


If you expect more than one row to have the same value in your_sort_column you can also use the rank() function

SELECT *
FROM (
  SELECT some_column, 
         rank() over (order by your_sort_column desc) as row_rank
  FROM some_table
) t
WHERE row_rank = 3
This migh return more than one row..
like image 22
a_horse_with_no_name Avatar answered Oct 24 '22 05:10

a_horse_with_no_name


I think the below query will work to find the second highest record with NOT IN.

SELECT MAX( userId )
FROM table 
WHERE userId NOT IN ( 
                      SELECT MAX( userId )
                      FROM table
                    ); 

simple and useful...

like image 5
prakash Avatar answered Oct 24 '22 04:10

prakash