Как получить вторую по величине или третью запись из таблицы
Кто-нибудь может рассказать мне, как узнать 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