【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,
sql查询面试题及答案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)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论