难度中上。分组后部门薪资总和占比为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。