考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

表emp有如下字段:deptno, empid, name, job, sal。分别表示:部门编号、员工编号、员工姓名、职位、薪资。请增加字段“薪资部门占比”,以下代码正确的是( )
A. select *, sal/(select sum(sal) from emp) as 薪资部门占比 from emp;
B. select *, sal/sum(sal) as 薪资部门占比 from emp;
C. select *, sal/sum(sal)over(partition by deptno) as 薪资部门占比 from emp;
D. select *, sal/sum(sal)over(partition by empid) as 薪资部门占比 from emp;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

sum(sal)over(partition by deptno) 为开窗函数,计算每一个分组(按部门编号deptno分组)的工资总和。sal/sum(sal)over(partition by deptno)计算的是每一名员工的薪资部门占比。

正确答案是:C

专业分析如下:

A: `select *, sal/(select sum(sal) from emp) as 薪资部门占比 from emp;`
- 这条语句计算的是每个员工的薪资占全表总薪资的比例,而不是按部门计算的薪资占比。因此,这不是我们需要的结果。

B: `select *, sal/sum(sal) as 薪资部门占比 from emp;`
- 这条语句试图直接在同一行中计算sum(sal),但没有使用聚合函数或窗口函数,因此会导致SQL语法错误。

C: `select *, sal/sum(sal)over(partition by deptno) as 薪资部门占比 from emp;`
- 这条语句使用了窗口函数`sum(sal) over(partition by deptno)`,它会根据部门编号(deptno)对薪资进行分区计算,从而得到每个员工在其所在部门中的薪资占比。这正是我们需要的结果。

D: `select *, sal/sum(sal)over(partition by empid) as 薪资部门占比 from emp;`
- 这条语句使用了窗口函数`sum(sal) over(partition by empid)`,但它是按员工编号(empid)进行分区的,这意味着每个员工的分区只有自己一个人,因此计算结果总是1,不符合需求。

综上所述,正确答案是C。