使用分析单

分析函数计算基于行组的值,并可以用来实现rownum伪列表述的结果;
select ename ,sal,row_number() over(order by sal desc) as sal_order from emp;

结果:
ENAME             SAL  SAL_ORDER
---------- ---------- ----------
KING             5000          1
SCOTT            3000          2
FORD             3000          3
JONES            2975          4
BLAKE            2850          5
CLARK            2450          6
ALLEN            1600          7
TURNER           1500          8
MILLER           1300          9
WARD             1250         10
MARTIN           1250         11
ADAMS            1100         12
JAMES             950         13
SMITH             800         14

在sql语句中,可以在行的顺序集上获得行号。肥西函数知道在非配行号之前使用order by 从句。
select deptno ename ,sal,row_number() over(partition by deptno order by sal desc) as sal_order from emp;

结果:
     ENAME        SAL  SAL_ORDER
---------- ---------- ----------
        10       5000          1
        10       2450          2
        10       1300          3
        20       3000          1
        20       3000          2
        20       2975          3
        20       1100          4
        20        800          5
        30       2850          1
        30       1600          2
        30       1500          3
        30       1250          4
        30       1250          5
        30        950          6

row_number ()分析函数可以仅为行的单独顺序集分配行号码,也可以在结果集内部使用它。
select deptno ,ename, rownum ,sal from (select deptno, ename ,sal, row_number() over(partition by deptno order by sal desc) as sal_order from emp)where sal_order<2

结果:
    DEPTNO ENAME          ROWNUM        SAL
---------- ---------- ---------- ----------
        10 KING                1       5000
        20 SCOTT               2       3000
        30 BLAKE               3       2850

你可能感兴趣的:(sql)