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

备考刷题,请到

CDA认证小程序

表emp有如下字段:deptno, empid, name, job, sal。分别表示:部门编号、员工编号、员工姓名、职位、薪资。求每个部门的工资占比,结果用百分号表示,保留2位小数。以下代码正确的是( )
A. select deptno, sum(sal)/(select sum(sal) from emp) from emp;
B. select deptno, sum(sal)/(select sum(sal) from emp) from emp group by deptno;
C. select deptno, concat(round(sum(sal)/(select sum(sal) from emp)*100,2),“%”) from emp group by deptno;
D. select deptno, concat(round(sum(sal)/(select sum(sal) from emp),2),“%”) from emp group by deptno;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(1)

难度中上。分组后部门薪资总和占比为sum(sal)/(select sum(sal) from emp)以小数形式呈现;round(sum(sal)/(select sum(sal) from emp)*100,2)实现该值扩大100倍,保留2位小数;concat(round(sum(sal)/(select sum(sal) from emp)*100,2),“%”) 实现该值与“%”拼接。

正确答案是:C

分析如下:

A: `select deptno, sum(sal)/(select sum(sal) from emp) from emp;`
- 这个查询没有使用 `GROUP BY` 子句,因此无法按部门计算工资占比。

B: `select deptno, sum(sal)/(select sum(sal) from emp) from emp group by deptno;`
- 这个查询虽然按部门分组计算了工资占比,但没有将结果转换为百分比格式,也没有保留两位小数。

C: `select deptno, concat(round(sum(sal)/(select sum(sal) from emp)*100,2),“%”) from emp group by deptno;`
- 这个查询首先按部门分组计算工资占比,然后将结果乘以100转换为百分比,并使用 `round` 函数保留两位小数,最后使用 `concat` 函数添加百分号。这个查询满足题目要求。

D: `select deptno, concat(round(sum(sal)/(select sum(sal) from emp),2),“%”) from emp group by deptno;`
- 这个查询按部门分组计算了工资占比,并保留了两位小数,但没有将结果转换为百分比(没有乘以100)。

因此,正确答案是C。

用户131508
子查询导致两次全表扫描,数据量大的时候效率很低 嵌套子查询,要依靠查询优化器处理,把控性不高 应该用开窗 sum(sal)/sum (sal) over () 全表扫描only one 代码简洁