给出表格:
Departments: dept_id, dept_name
Employees: dept_id, emp_id, salary
我试图提出 一个查询,该查询显示dept_id,dept_name,特定部署的平均工资以及该部门的员工数量。员工人数少于20人的部门,平均部门工资低于2000人。
以下是我用来显示薪水低于2000的员工的查询:
这就是我提出的薪水
SELECT dept_id, salary
FROM employees
WHERE (salary) < 2000;
我知道这可以用来计算部门人数
SELECT count(*) as count,dept.dept_name
FROM employees
INNER JOIN dept on employees.department_id = dept.department_id
GROUP BY dept.dept_name;
我如何在单个查询中实现它以使其符合规范?
答案 0 :(得分:2)
在查询中添加HAVING
子句,该子句仅限于平均工资低于2000的部门。
SELECT
d.dept_id,
d.dept_name,
COUNT(*) AS count
FROM employees e
INNER JOIN dept d
ON e.department_id = d.department_id
GROUP BY
d.dept_id -- or maybe GROUP BY d.dept_id, d.dept_name if this doesn't work
HAVING
COUNT(*) < 20 AND
AVG(salary) < 2000;
WHERE
子句适用于单个记录,但HAVING
子句适用于GROUP BY
运行后的组。在这种情况下,你需要后者。
编辑:最好按dept_id
列进行分组,因为这应该始终是唯一的(并且应该是此表中的主键)。按部门名称分组的潜在风险是两个不同的部门可能具有相同的名称。
答案 1 :(得分:1)
SELECT count(*) as count,dept.dept_name, salary
FROM employees
INNER JOIN dept on employees.department_id = dept.department_id
GROUP BY dept.dept_name HAVING salary < 2000