Сортировка получить первые результаты N в вопросе

Сцена:

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

---------------------------

контекст 1.Oracle

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

создать  таблицу test_data (
       ID varchar2 ( 32 ),
       Имя varchar2 ( 32 ),
       Счет поплавка
)

вставить  в test_data значений ( ' xxx1 ' , ' 小明' , 97 );
вставить  в test_data значений ( ' XXX2 ' , ' 小军' , 93 );
вставить  в test_data значений ( ' xxx3 ' , ' 小红' , 97 );
вставить  в test_data значений ( ' xxx4' ' Black ' , 95 );

Запрос для получения данных следующим образом:

(4 выбранной строки)

 Мы хотим, чтобы получить черный в настоящее время занимает второе место, принимая во внимание в ROWNUM Oracle обеспечивает свойство, то возьмите меня орден примерно 2 ROWNUM не на линии Ну, тогда вы можете получить следующий SQL:

выберите имя
   из ( выберите т. *  от test_data т порядка  по t.score убыв )
  , где ROWNUM =  2

Получить результаты:

 (Выбранная строка 0)

А? Почему это? Очевидно, я первый сортируют, а затем взять 2 ROWNUM нет данных следует проверить черную вещь?

Здесь я спрашивал RowNum собственности Oracle, на самом деле, это очень магические свойства, которые были подобраны для каждой части данных, такие как , где выбран ROWNUM = 2, на самом деле, ROWNUM каждая строка 1, и , таким образом , не будет получить желаемые результаты. Подробное описание см https://blog.csdn.net/haijiege/article/details/78856307

Как решить? - псевдоним

Справа, это взять псевдоним, следующим образом:

выберите имя
   из ( выберите название, ROWNUM гп
           из ( выберите т. *  от test_data т порядка  по t.score убывание ))
  , где гп =  2

Такой запрос к результатам:

(1 выбранная строка)

 

 

 А? Очевидно, я хочу, чтобы получить черный имя, как оно будет красным? На самом деле, проблема здесь такая же вид элементов, как фронт два сорт 97, так что вторая строка бита 97 красного цвета (ID Сяомин красного немного больше, чем код ASCII меньше), в случае как решить эту проблему?

Это требует сопоставления результатов для каждой строки запроса больше, чем текущее число строк в результирующем строке в результате текущей позиции, вы можете получить следующий SQL:

выберите имя
   из ( выберите имя,
               ( Выберите  отсчет ( отличный балл)
                   от test_data
                  , где оценка > = s.score) , как гп
           от test_data сек
          порядка  по бальному убыв )
  , где гп =  2

Результаты запроса:

(1 выбранная строка)

 

 

 Так что вы можете получить желаемые результаты это!

2.Mysql контекст

Мышление по существу такой же, как и выше, но не то же самое предложение, как он использован здесь, хранимые процедуры (функции), описанные

CREATE  FUNCTION getNthScore (п INT ) ВОЗВРАТ  INT  
НАЧАТЬ 
SET п = п -  1 ;
ВОЗВРАТ ( 
  ВЫБОР ИМЯ ИЗ test_data ГДЕ оценка = ( ВЫБОР  DISTINCT счет FROM test_data ORDER  BY оценка DESC LIMIT п, 1 )
);
КОНЕЦ

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

Таким образом, входные п = 2, то результат запроса получают:

(Запись 1, всего 1)

 

---------------------------

До сих пор!

рекомендация

отwww.cnblogs.com/doona-jazen/p/12004737.html