等级:-从1开始为每行分配一个唯一的数字,但具有重复值的行除外,在这种情况下,将为每个重复的排名分配相同的排名,并且序列中会出现空白。
Row_number:-为以1.开头的每行返回一个唯一编号。对于具有重复值的行,将任意分配编号。
Dense_rank:-为每行从1开始分配一个唯一的数字,但具有重复值的行除外,在这种情况下,将分配相同的排名。
前#1
==========
select ename,empno ,sum(sal) from emp where deptno=10 group by ename,empno order by ename,empno;
例#2
==========
select ename,empno ,sum(sal) SALARY,
rank() over(order by sum (sal) desc) RANK,
dense_rank() over(order by sum (sal) desc) SALARY_DENSE,
ROW_NUMBER() OVER (order by sum (sal) desc) SALARY_NUMBER
from emp
where deptno=10
group by ename,empno
order by ename,empno;
例#3
==========
select ename,empno ,sum(sal) SALARY,
rank() over (PARTITION BY ENAME order by sum (sal) desc) RANK,
dense_rank() over (PARTITION BY ENAME order by sum (sal) desc) SALARY_DENSE,
ROW_NUMBER() OVER (PARTITION BY ENAME order by sum (sal) desc) SALARY_NUMBER
from emp
group by ename,empno
order by ename,empno;
例#4
==========
select DEPTNO,empno ,sum(sal) SALARY,
rank() over (PARTITION BY DEPTNO order by sum (sal) desc) RANK,
dense_rank() over (PARTITION BY DEPTNO order by sum (sal) desc) SALARY_DENSE,
ROW_NUMBER() OVER (PARTITION BY DEPTNO order by sum (sal) desc) SALARY_NUMBER
from emp
WHERE DEPTNO=30
group by DEPTNO,empno
order by DEPTNO,empno;
例#5
==========
SELECT
MIN(DEPTNO)
KEEP (DENSE_RANK FIRST ORDER BY SUM(SAL) DESC) BEST,
MIN(DEPTNO)
KEEP (DENSE_RANK LAST ORDER BY SUM(SAL) DESC) WORST
FROM EMP
GROUP BY DEPTNO;
例#6
==========
SELECT
MIN(DEPTNO)
KEEP (DENSE_RANK FIRST ORDER BY SUM(SAL) DESC) MIN_BEST,
MAX(DEPTNO)
KEEP (DENSE_RANK FIRST ORDER BY SUM(SAL) DESC) MAX_BEST,
MIN(DEPTNO)
KEEP (DENSE_RANK LAST ORDER BY SUM(SAL) DESC) MIN_WORST,
MAX(DEPTNO)
KEEP (DENSE_RANK LAST ORDER BY SUM(SAL) DESC) MAX_WORST
FROM EMP
GROUP BY DEPTNO;
处理空值
-----------------------------------
select DEPTNO,empno ,sum(sal) SALARY,
rank() over (order by sum (sal) desc NULLS LAST) RANK
from emp group by DEPTNO,empno;
From: https://bytes.com/topic/oracle/insights/670841-ranking-function
SQL排名函数详解
1392

被折叠的 条评论
为什么被折叠?



