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

slmsl1lt  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(1173)

给定表格:

Departments: dept_id, dept_name
Employees: dept_id, emp_id, salary

我试着提出一个查询,显示部门id、部门名称、特定部门的平均工资,以及该部门的员工人数,其中部门员工少于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;

我该如何在一个查询中实现它,以便它符合规范?

au9on6nz

au9on6nz1#

添加 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 列,因为它应该始终是唯一的(并且应该是该表中的主键)。按部门名称分组的潜在风险是,两个不同的部门可能具有相同的名称。

ws51t4hk

ws51t4hk2#

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

相关问题