--解析函数第二种分区:分区解析
--求部门的收入排名
--解析函数 规律 解析函数() over(partition by 字段 order by 字段)
--在先分区,再字段排序以后,每个区分别进行某种解析计算
SELECT deptno,empno,ename,sal,
dense_rank() over(PARTITION BY deptno ORDER BY nvl(sal,0) DESC) x
FROM emp
DEPTNO | EMPNO | ENAME | SAL | X |
10 | 7839 | KING | 8000 | 1 |
10 | 7782 | CLARK | 7450 | 2 |
10 | 9000 | xiaoming |
| 3 |
20 | 7369 | SMITH | 8000 | 1 |
20 | 7788 | SCOTT | 7000 | 2 |
20 | 7902 | FORD | 6000 | 3 |
20 | 7566 | JONES | 5975 | 4 |
20 | 7876 | ADAMS | 4100 | 5 |
30 | 7698 | BLAKE | 6850 | 1 |
30 | 7499 | ALLEN | 5600 | 2 |
30 | 7844 | TURNER | 5500 | 3 |
30 | 7521 | WARD | 5250 | 4 |
30 | 7654 | MARTIN | 5250 | 4 |
案例:
_ 各种新闻(娱乐,体育,8挂,军事)的单击率在前3名记录
_ 每种图片(计算机类,考试类,文学),销售量在前10名记录
_ 每个班的前3名
行数
--行数解析(比rownum更高效,主要用于分页)
SELECT * FROM (
SELECT deptno,empno,ename,sal,
row_number() over(ORDER BY nvl(sal,0) DESC) x
FROM emp) t
WHERE x BETWEEN 5 AND 10;
DEPTNO | EMPNO | ENAME | SAL | X |
30 | 7698 | BLAKE | 6850 | 5 |
20 | 7902 | FORD | 6000 | 6 |
20 | 7566 | JONES | 5975 | 7 |
30 | 7499 | ALLEN | 5600 | 8 |
30 | 7844 | TURNER | 5500 | 9 |
30 | 7521 | WARD | 5250 | 10 |