Если то, что вы хотите сделать, это отобразить первые десять отсчетов, включая связи.Это легко решить с помощью АНАЛИТИЧЕСКОЙ функции, такой как RANK()
или DENSE_RANK()
...
SQL> select * from
2 ( select
3 ename
4 , sal
5 , rank() over (order by sal desc) sal_rank
6 from emp
7 )
8 where sal_rank <= 10
9 /
ENAME SAL SAL_RANK
---------- ---------- ----------
QUASSNOI 6500 1
SCHNEIDER 5000 2
FEUERSTEIN 4500 3
VERREYNNE 4000 4
LIRA 3750 5
PODER 3750 5
KESTELYN 3500 7
TRICHLER 3500 7
GASPAROTTO 3000 9
ROBERTSON 2990 10
RIGBY 2990 10
11 rows selected.
SQL>
Обратите внимание, что если бы у RIGBY была та же зарплата, что и у GASPAROTTO, их SAL_RANK был бы 9 , ROBERTSON был бы 11 , а результирующий набор состоял бы из десяти строк.
DENSE_RANK()
отличается от RANK()
тем, что он всегда возвращает первые десять вместо того, чтобы пропускать связи ...
SQL> select * from
2 ( select
3 ename
4 , sal
5 , dense_rank() over (order by sal desc) sal_rank
6 from emp
7 )
8 where sal_rank <= 10
9 /
ENAME SAL SAL_RANK
---------- ---------- ----------
1
SCHNEIDER 5000 2
FEUERSTEIN 4500 3
VERREYNNE 4000 4
LIRA 3750 5
PODER 3750 5
KESTELYN 3500 6
TRICHLER 3500 6
GASPAROTTO 3000 7
ROBERTSON 2990 8
RIGBY 2990 8
SPENCER 2850 9
BOEHMER 2450 10
13 rows selected.
SQL>