Программирование >>  Преобразование значений null 

1 ... 121 122 123 [ 124 ] 125 126 127 ... 219


12 3000

13 3000

14 5000

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

Для пользователей Oracle существует альтернативный вариант: для формирования последовательности номеров строк вместо функции

ROW NUMBER OVER можно использовать функцию ROWNUM:

select sal

from ( select sal, rownum rn

from ( select sal from emp order by sal ) )

where rn between 6 and 10

1300 1500 1600 2450 2850

Применение ROWNUM вынуждает создавать дополнительный подзапрос. Самый внутренний подзапрос сортирует строки соответственно размеру заработной платы. Следующий подзапрос присваивает этим строкам порядковые номера. И, наконец, самый внешний SELECT возвращает запрашиваемые данные.

MySQL и PostgreSQL

Введение в конструкцию SELECT оператора OFFSET делает перемещение по результатам простой и понятной задачей. Если задать OFFSET равным 0, результаты будут выводиться, начиная с первой строки; если OFFSET равен 5 - с шестой строки; и если OFFSET равен 10 - с одиннадцатой строки. Оператор LIMIT ограничивает число возвращаемых строк. Сочетая эти два оператора, можно задавать, с какой строки и сколько строк результирующего множества должно быть возвращено.

Как пропустить n строк таблицы Задача

Требуется в результате запроса возвратить служащих из таблицы EMP через одного; т. е. необходимо получить записи для первого, третьего,



ADAMS

BLAKE

FORD

JONES

MARTIN

SCOTT

TURNER

Решение

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

DB2, Oracle и SQL Server

Применяя функцию ROW NUMBER OVER, пронумеруйте строки, тогда с помощью функции вычисления остатка от деления можно будет пропускать некоторые из них. В DB2 и Oracle функцией вычисления остатка от деления является функция MOD. В SQL Server используется оператор %. В следующем примере с помощью оператора MOD будут пропущены строки под четными номерами:

1 select ename

2 from (

3 select row number() over (order by ename) rn,

4 ename

пятого служащего и т. д. Например, из следующего результирующего множества:

ENAME

ADAMS ALLEN

BLAKE

CLARK

FORD

JAMES

JONES

KING

MARTIN

MILLER

SCOTT

SMITH

TURNER

WARD

мы должны получить:

ENAME



from emp

ENAME

ADAMS

ALLEN

BLAKE

CLARK

FORD

JAMES

JONES

KING

MARTIN

MILLER

SCOTT

SMITH

TURNER

WARD

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

5 from emp

6 ) x

7 where mod(rn,2) = 1

MySQL и PostgreSQL

Поскольку в этих СУБД нет встроенных функций, реализующих ранжирование или нумерование строк, расположить строки в определенном порядке (в данном примере по именам) поможет скалярный подзапрос. Затем пропустите строки, используя остаток от деления:

1 select x.ename

2 from (

3 select a.ename,

4 (select count(*)

5 from emp b

6 where b.ename <= a.ename) as rn

7 from emp a

8 ) x

9 where mod(x.rn,2) = 1

Обсуждение

DB2, Oracle и SQL Server

Вызов ранжирующей функции ROW NUMBER OVER во вложенном запросе Х обеспечивает присвоение ранга каждой строке (никаких связей даже между дублирующимися именами). Результаты показаны ниже:

select row number() over (order by ename) rn, ename



1 ... 121 122 123 [ 124 ] 125 126 127 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика