給羣裏的哥們寫的sql(row_number、rank、dense_rank)


<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

從上圖可以看出,他想要實現部門的總工資排名。這個就要用到我們常說的分析函數了。分析函數是什麼,這裏就不多說了。有興趣的朋友,請自己查閱官方文檔。

下面我們來實現上圖的功能:
首先,第一步我們需要先求出每個部門的總工資,SQL如下:
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)

結果集如下:


圖片顯示的效果,就是我們想要的最終結果。以後在附上相關分析函數的使用效果。今天就到這,上班了。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章