оракул 10g, выберите пункт - PullRequest
       5

оракул 10g, выберите пункт

1 голос
/ 19 февраля 2011

предположим, что таблица сотрудников с 14 строками, и я хочу выбрать только средние строки, как от 3 до 10, тогда как это можно сделать?

Ответы [ 4 ]

4 голосов
/ 19 февраля 2011

Сначала вы должны определить порядок. Без упорядочения «средние ряды, как от 3 до 10» не имеет смысла. Когда вы знаете порядок, вы можете использовать почти тот же запрос, что и предложенный RC:

select *
  from ( select e.*
              , rownum rn
           from emp e
          order by <your ordering columns here>
       )
 where rn between 3 and 10

С уважением,
Роб.

2 голосов
/ 19 февраля 2011
SELECT * FROM (SELECT e.*, rownum r FROM emp e) WHERE r BETWEEN 3 AND 10;
0 голосов
/ 21 февраля 2011

Если вам необходимо получить «все строки, кроме верхней 3 и нижней 3», независимо от количества строк в таблице, вы можете использовать это:

select * from (
  select emp.*,
         row_number() over (order by id) n,
         count(*) over () c
  from emp)
where n between 4 and c - 4;

Если ваше требованиечтобы получить «все строки, кроме верхних 20% и нижних 20%», вы можете использовать это:

select * from (
  select emp.*,
         ntile(5) over (order by id) n,
         count(*) over () c
  from emp)
where n between 2 and 4;
0 голосов
/ 20 февраля 2011

Если вы ищете случайную выборку строк, вы можете использовать предложение sample. Однако он основан на процентах.

выбор * из таблицы (5); - 5 процентов

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