mySQL:如何编写满足两个或更多条件的查询

时间:2018-04-30 13:57:02

标签: mysql sql database

给出表格:

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;

我如何在单个查询中实现它以使其符合规范?

2 个答案:

答案 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