Как получить вторую по величине или третью запись из таблицы

Кто-нибудь может рассказать мне, как узнать N-ю самую большую запись из таблицы в Oracle?

Как и для наибольшего, мы можем использовать MAX (имя_столбца), есть ли эффективный способ найти n-й по величине также?

Ответ 1

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


Если вы ожидаете, что более чем одна строка имеет одинаковое значение в your_sort_column, вы также можете использовать функцию rank()

SELECT *
FROM (
  SELECT some_column, 
         rank() over (order by your_sort_column desc) as row_rank
  FROM some_table
) t
WHERE row_rank = 3
Эта волна возвращает несколько строк.

Ответ 2

вы можете найти n-е наибольшее значение столбца, используя следующий запрос

SELECT * FROM TableName a WHERE 
n = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE a.ColumnName <=b.ColumnName);

Ответ 3

Я думаю, что ниже запрос будет работать, чтобы найти вторую самую высокую запись с NOT IN.

SELECT MAX( userId) FROM table WHERE userId NOT IN (таблица SELECT MAX (userId) FROM)

простой и полезный...

Ответ 4

Чтобы получить вторую по величине зарплату, используйте это:

select salary from 
  (select s2.salary,rownum rm from
     (select distinct salary from employees order by salary desc)
  s2 where rownum<=2)
where rm >= 2

Ответ 5

Он работает на вторую высшую зарплату,

$query = "SELECT * FROM `table_name` ORDER BY field_name` DESC LIMIT 1 , 1 "; 

Ответ 6

Вы можете ORDER BY column name, а затем LIMIT 1,1 получить второй

изменить

Упс, не видел тег Oracle, извините.
ORDER BY column name WHERE ROWNUM = 2 должен работать лучше.

Ответ 7

SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (
  SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal
);

Замените &N на нужный номер. Например, 2 предоставит вам вторую по величине зарплату.

Если вы используете PL/SQL, просто выполните инструкцию. Он будет запрашивать N.

Ответ 8

Попробуйте это,

SELECT Sal FROM Tab ORDER BY Sal DESC LIMIT 2,1

Ответ 9

Попробуйте следующее:

SELECT DISTINCT TOP 3 id,[Password] 
FROM Users_changepassword 
WHERE [UserId] = 3
ORDER BY id DESC

Ответ 10

Вы можете попробовать этот sql, где используется функция Row_number() из оракула sql

select column_name from (
 select column_name ,  
row_number() over (order by column_name  desc) as  row_num  
from table_Name ) tablex
where row_num =3

Ответ 11

SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee)

Ответ 12

Вы можете использовать CONNECT BY PRIOR по:

CREATE TABLE t(i INT, sal INT);
INSERT INTO t(i, sal)
SELECT 1,100 FROM dual UNION
SELECT 2,100 FROM dual UNION
SELECT 3,200 FROM dual UNION
SELECT 4,500 FROM dual UNION
SELECT 5,1000 FROM dual;

Query:

SELECT level, MAX(sal) AS sal
FROM t
--WHERE level = 2 -- set position here
CONNECT BY prior sal > sal
GROUP BY level
ORDER BY level;

DBFiddle Demo

DBFiddle Demo2


EDIT:

Второй подход заключается в использовании аналитической функции NTH_VALUE:

SELECT DISTINCT NTH_VALUE(sal, 2) OVER(ORDER BY sal DESC
       ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM t;

DBFiddle Demo3