Запрос для поиска n-го максимального значения столбца - PullRequest
24 голосов
/ 17 сентября 2008

Я хочу найти 2-е, 3-е ... максимальное значение столбца

Ответы [ 28 ]

0 голосов
/ 07 сентября 2012

Ответ: верхняя секунда:

select * from (select * from deletetable   where rownum <=2 order by rownum desc) where rownum <=1
0 голосов
/ 17 сентября 2008

Еще один для Oracle с использованием аналитических функций:

select distinct col1 --distinct is required to remove matching value of column
from 
( select col1, dense_rank() over (order by col1 desc) rnk
  from tbl
)
where rnk = :b1
0 голосов
/ 07 августа 2018

MySQL запрос : предположим, что я хочу узнать nth max оклад из таблицы сотрудников

select salary 
form employee
order by salary desc
limit n-1,1 ;
0 голосов
/ 02 мая 2009
select sal,ename from emp e where
 2=(select count(distinct sal) from emp  where e.sal<=emp.sal) or
 3=(select count(distinct sal) from emp  where e.sal<=emp.sal) or
 4=(select count(distinct sal) from emp  where e.sal<=emp.sal) order by sal desc;
0 голосов
/ 02 января 2018

В PostgreSQL, чтобы найти N-ую самую большую зарплату из таблицы Employee.

SELECT * FROM Employee WHERE salary in 
(SELECT salary FROM Employee ORDER BY salary DESC LIMIT N) 
ORDER BY salary ASC LIMIT 1;
0 голосов
/ 27 декабря 2010

MySQL:

select distinct(salary) from employee order by salary desc limit (n-1), 1;
0 голосов
/ 01 октября 2018

Решение для поиска значения Nth Maximum определенного столбца в SQL Server:

Таблица сотрудников:

Employee Table

Таблица продаж:

Sales Table

Данные таблицы сотрудников:

==========
Id  name
=========
6   ARSHAD M
7   Manu
8   Shaji

Данные таблицы продаж:

=================
id  emp_id   amount
=================
1   6        500
2   7        100
3   8        100
4   6        150
5   7        130
6   7        130
7   7        330

Запрос, чтобы узнать подробности о работнике, у которого самая высокая продажа / N у самого высокого продавца

select * from (select E.Id,E.name,SUM(S.amount) AS 'total_amount' from employee E INNER JOIN Sale S on E.Id=S.emp_id group by S.emp_id,E.Id,E.name ) AS T1 WHERE(0)=( select COUNT(DISTINCT(total_amount)) from(select E.Id,E.name,SUM(S.amount) AS 'total_amount' from employee E INNER JOIN Sale S on E.Id=S.emp_id group by S.emp_id,E.Id,E.name )AS T2 WHERE(T1.total_amount<T2.total_amount) );

В ГДЕ (0) заменить 0 на n-1

Результат:

========================
id  name    total_amount
========================
7   Manu    690
0 голосов
/ 03 сентября 2012

Стол сотрудника

salary 
1256
1256
2563
8546
5645

Вы найдете второе максимальное значение по этому запросу

select salary 
from employee 
where salary=(select max(salary) 
                from employee 
                where salary <(select max(salary) from employee));

Вы нашли третье максимальное значение по этому запросу

select salary 
from employee 
where salary=(select max(salary) 
                from employee 
                where salary <(select max(salary) 
                                from employee 
                                where salary <(select max(salary)from employee)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...