Какой самый простой SQL-запрос для поиска второго по величине значения? - PullRequest
145 голосов
/ 28 августа 2008

Какой самый простой SQL-запрос для поиска второго по величине целочисленного значения в определенном столбце?

Возможно, в столбце есть повторяющиеся значения.

Ответы [ 46 ]

1 голос
/ 28 февраля 2015
select age from student group by id having age<(select max(age) from student)order by age limit 1
1 голос
/ 23 августа 2013

Это самый сложный способ:

SELECT
      Column name
FROM
      Table name 
ORDER BY 
      Column name DESC
LIMIT 1,1
1 голос
/ 06 декабря 2016

Как вы упомянули повторяющиеся значения. В таком случае вы можете использовать DISTINCT и GROUP BY , чтобы найти второе по величине значение

Вот таблица

зарплата

:

enter image description here

GROUP BY

SELECT  amount FROM  salary 
GROUP by amount
ORDER BY  amount DESC 
LIMIT 1 , 1

DISTINCT

SELECT DISTINCT amount
FROM  salary 
ORDER BY  amount DESC 
LIMIT 1 , 1

Первая часть LIMIT = начальный индекс

Вторая порция LIMIT = сколько стоит

0 голосов
/ 03 сентября 2016
select extension from [dbo].[Employees] order by extension desc offset  2  rows fetch next  1 rows only
0 голосов
/ 28 августа 2008

Это работает в MS SQL:

select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] < 
 ( select max([COLUMN_NAME]) from [TABLE_NAME] )
0 голосов
/ 23 мая 2016

Microsoft SQL Server - использование двух вершин для N-го наибольшего значения (псевдоним подзапроса).

Чтобы решить для 2-го высшего:

SELECT TOP 1 q.* 
FROM (SELECT TOP 2 column_name FROM table_name ORDER BY column_name DESC) as q
ORDER BY column_name ASC;

Использует TOP дважды, но требует псевдонима с псевдонимом. По сути, внутренний запрос принимает самые большие 2 значения в порядке убывания, затем внешний запрос переворачивается в порядке возрастания, так что 2-й самый высокий теперь находится сверху. Оператор SELECT возвращает эту вершину.

Чтобы найти n-е наибольшее значение, измените значение TOP подзапроса. Например:

SELECT TOP 1 q.* 
FROM (SELECT TOP 5 column_name FROM table_name ORDER BY column_name DESC) as q
ORDER BY column_name;

Вернет 5-е наивысшее значение.

0 голосов
/ 04 марта 2016
select score 
from table 
where score = (select max(score)-1 from table)
0 голосов
/ 28 августа 2008

Как то так? Я не проверял это, хотя:

select top 1 x
from (
  select top 2 distinct x 
  from y 
  order by x desc
) z
order by x
0 голосов
/ 25 марта 2013

Запрос, чтобы найти второе по величине число в строке-

select Top 1 (salary) from XYZ
where Salary not in (select distinct TOP 1(salary) from XYZ order by Salary desc)
ORDER BY Salary DESC

Путем изменения выделенного Top 1 на TOP 2, 3 или 4 вы можете найти 3-й, 4-й и 5-й наивысший соответственно.

0 голосов
/ 24 февраля 2018

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

    select top 1 UnitPrice from (select distinct top n UnitPrice from 
[Order Details] order by UnitPrice desc) as Result order by UnitPrice asc

Здесь значение n будет 1 (для наибольшего числа), 2 (для второго наибольшего числа), 3 (для третьего наибольшего числа) ...

...