Выберите второй по величине из таблицы без ограничений - PullRequest
5 голосов
/ 19 октября 2010

Как мы можем выбрать вторую по величине отметку или что-то еще из таблицы без использования LIMIT ? Я знаю, что это возможно с помощью LIMIT, но возможно ли это без использования?

Предположим, у нас есть столбцы id и отметки.

Ответы [ 4 ]

8 голосов
/ 19 октября 2010

Предполагая, что оценки являются уникальными , следующий запрос дает вам вторую по величине оценку.

SELECT   MAX(marks)
FROM     ATable
WHERE    marks < (SELECT MAX(marks) FROM ATable)

Чтобы получить всю запись, вы можете обернуть это в INNER JOIN

SELECT  t1.*
FROM    ATable t1
        INNER JOIN (
          SELECT   marks = MAX(marks)
          FROM     ATable
          WHERE    marks < (SELECT MAX(marks) FROM ATable)
        ) t2 ON t2. marks = t1.marks
1 голос
/ 19 октября 2010
select max(number), id 
from <tableName>
where number < (select max(number) from <tableName>)
0 голосов
/ 19 октября 2010

Если вам нужна целая строка (все столбцы), этот сделает это. Кроме того, он всегда будет возвращать только одну строку, даже если есть несколько с одинаковым 2-м максимальным значением.

Select top 1 * 
  From (Select Top 2 * 
          From TABLE 
         Order By marks desc
       ) a
Order By marks asc

Если вам нужна только одна строка с реальным 2-м максимальным значением, вы должны использовать:

select Top 1 * 
  from TABLE
 where marks < (select max(marks) from TABLE)
Order by max desc

Это также может быть сделано CTE (SQL Server 2005+):

;With a as 
(
Select Dense_Rank() over (order by marks desc) as nRank,
       *
  From TABLE
)
Select Top 1 * 
  from a
 Where nRank=2

Если вы хотите увидеть все строки с отметками 2-го максимума, просто удалите TOP 1 из предыдущего запроса.

0 голосов
/ 19 октября 2010

Вы могли бы сделать

SELECT MAX(marks) FROM TABLE 
WHERE marks NOT IN (SELECT MAX(marks) FROM TABLE)

но LIMIT должен работать лучше, чем выше, поэтому вопрос в том, почему вам это не нравится?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...