Извлечение второго по величине значения из таблицы - PullRequest
9 голосов
/ 15 июня 2010

Как мне извлечь второе по величине значение из таблицы?

Ответы [ 10 ]

11 голосов
/ 15 июня 2010
select max(val) from table where val < (select max(val) form table) 
6 голосов
/ 15 июня 2010

В MySQL вы можете, например, использовать LIMIT 1, 1:

SELECT col FROM tbl ORDER BY col DESC LIMIT 1, 1

См. Справочное руководство MySQL: SELECT Syntax ).

Предложение LIMIT может использоваться для ограничения количества строк, возвращаемых оператором SELECT. LIMIT принимает один или два числовых аргумента, которые оба должны быть неотрицательными целочисленными константами (кроме случаев использования подготовленных операторов).

С двумя аргументами первый аргумент задает смещение первой строки, которую нужно вернуть, а второй - максимальное количество строк, которые нужно вернуть. Смещение начальной строки равно 0 (не 1):

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15
5 голосов
/ 15 июня 2010

выберите верхние 2 field_name из таблицы table_name упорядочены по field_name desc limit 1

2 голосов
/ 15 июня 2010

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

SELECT * FROM 
(SELECT empno, deptno, sal,
DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC NULLS LAST) DENSE_RANK
FROM emp)
WHERE DENSE_RANK = 2;

Это работает как в Oracle, так и в SQL Server.

2 голосов
/ 15 июня 2010

Круто, это почти как Code Golf.

Microsoft SQL Server 2005 и выше:

SELECT *
FROM (
    SELECT 
        *,
        row_number() OVER (ORDER BY var DESC) AS ranking
    FROM table
) AS q
WHERE ranking = 2
2 голосов
/ 15 июня 2010
Select Top 1 sq.ColumnToSelect
From
(Select Top 2 ColumnToSelect
From MyTable
Order by ColumnToSelect Desc
)sq
Order by sq.ColumnToSelect asc
2 голосов
/ 15 июня 2010
SELECT E.lastname, E.salary FROM employees E
WHERE 2 = (SELECT COUNT(*) FROM employess E2
            WHERE E2.salary > E.salary)

Взято из здесь
Это работает почти во всех DBS

1 голос
/ 15 июня 2010

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

SELECT TOP 1 Column FROM Table WHERE Column < (SELECT MAX(Column) FROM Table) 
ORDER BY Column DESC

SELECT TOP 1 Column FROM (SELECT TOP <n> Column FROM Table ORDER BY Column DESC) 

ЗАКАЗАТЬ ПО АСК

измените n, чтобы получить значение любой позиции

1 голос
/ 15 июня 2010

Может быть:

SELECT * FROM table ORDER BY value DESC LIMIT 1, 1
0 голосов
/ 15 июня 2010

одно решение будет выглядеть так:

SELECT var FROM table ORDER BY var DESC LIMIT 1,1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...