ORACLE MAGAZINE
Июль Поиск
Российское Электронное Издание

Общая методология
Новости и события
Опыт пользователей
Oracle Applications
Высокие технологии
Постоянная экспозиция
Мастерская разработчика
Кабинет администратора
Полезные ссылки
Архив







       ОПЫТ ПОЛЬЗОВАТЕЛЕЙ

Нахождение N-го по старшинству значения. (II)

14 июня 2000 г.

Архив рекомендаций и кодов журнала Oracle Magazine, 30 января 1998, cod01308.html

Этот код прислал Atman Brahmachari, АБД компании Relational Technologies, Inc. в Manhattan Beach, штат California.

Если Вы используете Oracle7.3 или последующую версию, то для нахождения N-го по старшинству значения можно применить более быстрое решение, чем предложенное в скрипте tipb1c8.html. Использование индекса и указания (hint) делает его одним из наиболее быстрых решений подобного рода. Кроме того, что имеется входной параметр (&n), это решение позволяет Вам выбрать любой или даже все столбцы строки таблицы. Этот запрос возвращает все строки, стоящие на N-м по старшинству месте, которые, в свою очередь, могут быть отфильтрованы при использовании групповых функций (например, avg()/max()/min()), и отобажена будет только одна строка.

Таким образом, требуется использование Oracle 7.3 или выше, программирование hint-указания 'index_desc' в запросе и существование индекса для анализируемого столбца.

/* Условная табица EMP */
create table emp
(empno number,
 salary number )
/

/* Индекс, который используется в */
create index emp_sal on emp (salary)
/

/* Решение */
/*
Здесь мы имеем тривиальное (dummy) where-предложение, которое только обеспечивает выборку индекса и задействование hint-указания, гарантирующего, что используется именно индекс emp_sal
*/


select *
from emp
 where 
   salary = (select /*+ index_desc(emp_sal) */ min(salary)
                               from emp
                               where salary > 0
                               and rownum <= &n
                              )
/


[Прим. редактора: Обычно я всегда проверяю подобные коды из “Опыта пользователей”. Часто приходится исправлять ошибки, опечатки, добавлять результаты выполнения. В данном случае я не стал вылизывать предлагаемое решение, предоставив это нашим читателям в качестве теста. А заодно хочу проверить, много ли наших читателей интересуются этой рубрикой. ]



Материал номера:
Новый тест для специалистов по Oracle


Колонка главного редактора:

Oracle открывает третье тысячелетие.

 Письмо в редакцию
 


Человек месяца: Беседа с руководителями ИВЦ АИС и WEB-центра “Омега”
Oracle: от МВД до РПЦ