1. 程式人生 > >【SQL】今天的一個sql面試題(分組函式使用)

【SQL】今天的一個sql面試題(分組函式使用)

已經對試題做了化名處理。

表記錄如下:


根據表記錄,利用sql得出如下的結果:


這裡之所以記錄下來,是因為這個sql必須要用到高階分析函式,就是分組內排序分組求和

意思就是,題目要求就是按照deptno來分組,然後在分組內將記錄按照sal來排序,並且求得每條記錄的sal在該分組內總和sal的佔比。

select deptno,
       empno,
       ename,
       sal,
       RANK() OVER(PARTITION BY deptno ORDER BY sal) as "薪水排名",
       round((sal / (SUM(sal) OVER(PARTITION BY deptno))) * 100, 2) || '%' as "薪水佔比"
  from emp


當時我只知道要使用這兩個函式,但是具體寫法確實搞忘記了。

根據分組函式的使用,我們可以求得每個部門內薪水最高的員工,如果是銷售記錄表,我們同樣可以求得,銷售業績超過部門業績50%的銷售人員,等等這些都是可以的。

比如,我們需要知道每個部門薪水最高的員工記錄:

select deptno, empno, ename, sal
  from (select deptno,
               empno,
               ename,
               sal,
               RANK() OVER(PARTITION BY deptno ORDER BY sal desc) as rn
          from emp)
 where rn = 1

要求得最高,那麼分組內必須降序排列,然後提取每個組第一個記錄即可。


要求得,銷售業績超過部門業績50%的銷售人員,那麼必須使用前面的:

round((sal / (SUM(sal) OVER(PARTITION BY deptno))) * 100, 2)