<span style="font-size:18px;">最近精力比較有限,有些常用的東西就先記錄下來。方便以後自己查閱和總結。</span>
一個哥們想要實現如下效果:
DEPTNO ENAME SAL TOP3 部門工資 排序
---------- ---------- ---------- ----------
20 KING 5000 1 8750 2
20 CLARK 2450 2 8750 2
20 MILLER 1300 3 8750 2
10 SCOTT 3000 1 8975 1
10 FORD 3000 2 8975 1
10 JONES 2975 3 8975 1
30 BLAKE 2850 1 5950 3
30 ALLEN 1600 2 5950 3
30 TURNER 1500 3 5950 3
從上圖可以看出,他想要實現部門的總工資排名。這個就要用到我們常說的分析函數了。分析函數是什麼,這裏就不多說了。有興趣的朋友,請自己查閱官方文檔。
select deptno,
ename,
sal,
sum(sal) over(partition by deptno order by deptno) as sumsal
from emp
查詢的結果集:第二步,我們就要實現最終的功能,附上SQL:
select deptno,
ename,
sal,
sumsal,
row_number() over(partition by deptno order by sal) as "部門內排名",
dense_rank() over(order by sumsal) as "部門排名"
from (select deptno,
ename,
sal,
sum(sal) over(partition by deptno order by deptno) as sumsal
from emp)
結果集如下:
圖片顯示的效果,就是我們想要的最終結果。以後在附上相關分析函數的使用效果。今天就到這,上班了。。。。