【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)