此代码适用于MS SQL Server
SELECT
d.dept_id AS '部门编号',
d.dept_name AS '部门名称',
(SELECT COUNT(*) FROM employee WHERE dept_id=d.dept_id AND emp_wage BETWEEN 0 AND 4999) AS '5K以下员工人数',
(SELECT SUM(emp_wage) FROM employee WHERE dept_id=d.dept_id AND BETWEEN 0 AND 4999) AS '5K以下薪酬小计',
(SELECT COUNT(*) FROM employee WHERE dept_id=d.dept_id AND emp_wage BETWEEN 5000 AND 10000) AS '5K-10K员工人数',
(SELECT SUM(emp_wage) FROM employee WHERE dept_id=d.dept_id AND emp_wage BETWEEN 5000 AND 10000) AS '5K-10K薪酬小计',
(SELECT COUNT(*) FROM employee WHERE dept_id=d.dept_id AND emp_wage>10000) AS '10K以上员工人数',
(SELECT SUM(emp_wage) FROM employee WHERE dept_id=d.dept_id AND emp_wage >10000) AS '10K以上薪酬小计',
(SELECT COUNT(*) FROM employee WHERE dept_id=d.dept_id) AS '部门员工人数总数',
(SELECT SUM(emp_wage) FROM employee WHERE dept_id=d.dept_id) AS '部门薪酬合计',
(SELECT AVG(emp_wage) FROM employee WHERE dept_id=d.dept_id) AS '部门薪酬均值',
(SELECT MAX(emp_wage) FROM employee WHERE dept_id=d.dept_id) AS '部门薪酬最大值',
(SELECT MIN(emp_wage) FROM employee WHERE dept_id=d.dept_id) AS '部门薪酬最小值'
FROM department AS d ORDER BY d.dept_id ASC
这个题不难,希望只提供思路,不提供具体的sql:
部门表 left jion 员工表 ,以dept_id 做为关联字段
统计的输出字段,通过 count(case when ...) 与 sum(case when ...) ,还有avg(case when ...) 三个便可完成统计。
注意关联出来的null值处理
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!