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

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

Ответы [ 28 ]

1 голос
/ 25 сентября 2017
select column_name from table_name 
order by column_name desc limit n-1,1;

где n = 1, 2, 3, .... максимальное значение nth.

1 голос
/ 28 ноября 2014

Это запрос для получения nth наивысшего из столбца, n = 0 для второго наивысшего и n = 1 для 3-го наивысшего и так далее ...

 SELECT * FROM TableName
 WHERE ColomnName<(select max(ColomnName) from TableName)-n order by ColomnName desc limit 1;
1 голос
/ 13 ноября 2009
Select max(sal) 
from table t1 
where N (select max(sal) 
        from table t2 
        where t2.sal > t1.sal)

Чтобы найти N-ю максимальную сумму.

0 голосов
/ 20 сентября 2017

Простой SQL-запрос для получения сведений о сотруднике, у которого в таблице указано Nth MAX Salary Employee.

sql> select * from Employee order by salary desc LIMIT 1 OFFSET <N - 1>;

Рассмотрим структуру таблицы как:

Сотрудник ( id [int первичный ключ auto_increment], имя [varchar (30)], зарплата [int]);

Пример:

Если вам нужна 3 MAX зарплата в приведенной выше таблице, запрос будет:

sql> select * from Employee order by salary desc LIMIT 1 OFFSET 2;

Точно так же:

Если вам нужна 8-я MAX зарплата в таблице выше, запрос будет:

sql> select * from Employee order by salary desc LIMIT 1 OFFSET 7;

Примечание: Когда вам нужно получить значение Nth MAX, вы должны указать OFFSET как (N - 1) .

Таким же образом вы можете выполнять аналогичные операции в случае оплаты труда в порядке возрастания.

0 голосов
/ 17 июля 2014

Вы можете упростить вот так

SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT TOP 4 Sal FROM TableName ORDER BY Sal DESC)

Если Sal содержит повторяющиеся значения, используйте это

SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT distinct TOP 4 Sal FROM TableName ORDER BY Sal DESC)

4 будет n-м значением, может быть любым наибольшим значением, таким как 5 или 6 и т. Д.

0 голосов
/ 17 декабря 2013
Select min(fee) 
from fl_FLFee 
where fee in (Select top 4 Fee from fl_FLFee order by 1 desc)

Изменить номер четыре на N.

0 голосов
/ 26 июля 2013

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

Информация, связанная с этим запросом: в этом запросе используются две таблицы с именами employee и department со столбцами в имени сотрудника: name (имя сотрудника), dept_id (общий для сотрудника и отдела), salary

И столбцы в таблице отделов: dept_id (также для таблицы сотрудников), dept_name

SELECT
  tab.dept_name,MIN(tab.salary) AS Second_Max_Sal FROM (
    SELECT e.name, e.salary, d.dept_name, dense_rank() over (partition BY  d.dept_name          ORDER BY e.salary)  AS   rank FROM department d JOIN employee e USING (dept_id) )  tab
 WHERE
   rank  BETWEEN 1 AND 2
 GROUP BY
   tab.dept_name

спасибо

0 голосов
/ 17 сентября 2008

В SQL Server просто выполните:

select distinct top n+1 column from table order by column desc

А затем отбросьте первое значение, если оно вам не нужно.

0 голосов
/ 20 ноября 2012

(TableName = Student, ColumnName = Mark):

select *
from student 
where mark=(select mark 
            from(select row_number() over (order by mark desc) as t,
                 mark 
                 from student group by mark) as td 
            where t=2)
0 голосов
/ 17 сентября 2008

для SQL 2005:

SELECT col1 from 
     (select col1, dense_rank(col1) over (order by col1 desc) ranking 
     from t1) subq where ranking between 2 and @n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...