MySQL 按部门列出在各部门工作的员工人数。
时间: 2024-03-02 15:52:00 浏览: 252
可以使用如下 SQL 语句:
```sql
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
```
其中,`employees` 是员工表,包含 `department` 和 `employee_name` 两个字段。使用 `GROUP BY` 子句按照部门进行分组,然后使用聚合函数 `COUNT(*)` 统计每个部门的员工数量。最后,使用 `AS` 关键字给聚合函数起一个别名 `employee_count`,方便后续引用。
相关问题
mysql列出所有部门的相应信息和部门人数,没有员工的部门则部门人数显示为0
可以使用以下 SQL 语句来列出所有部门的相应信息和部门人数,没有员工的部门则部门人数显示为0:
```
SELECT department.dept_name, department.dept_no, COUNT(employee.emp_no) AS num_employees
FROM department
LEFT JOIN dept_emp ON department.dept_no = dept_emp.dept_no
LEFT JOIN employee ON dept_emp.emp_no = employee.emp_no
GROUP BY department.dept_name, department.dept_no
ORDER BY department.dept_no;
```
这里使用了左连接(LEFT JOIN)来保留所有的部门,即使它们没有员工。然后使用 COUNT 函数来计算每个部门的员工数,最后使用 GROUP BY 来按部门分组并且使用 ORDER BY 来按部门号排序。
mysql 有部门表(unique_code,parent_code,relati e_codes),relarie_codes是部门路径包括父级部门、本身部门和子部门,查询全部部门和子部门人员根据部门分组显示部门人数
可以使用 MySQL 的递归查询功能来实现这个需求。具体步骤如下:
1. 创建一个临时表,用于存储每个部门的子部门路径和所属部门的 unique_code。
```mysql
CREATE TEMPORARY TABLE IF NOT EXISTS temp_dept_path (
dept_path VARCHAR(255) NOT NULL,
dept_code VARCHAR(10) NOT NULL
);
```
2. 插入初始的部门数据,即包含所有一级部门的记录。
```mysql
INSERT INTO temp_dept_path (dept_path, dept_code)
SELECT CONCAT(unique_code, '/') AS dept_path, unique_code AS dept_code
FROM department
WHERE parent_code IS NULL;
```
3. 使用递归查询,依次获取每个部门的所有子部门路径和所属部门的 unique_code,并插入到临时表中。
```mysql
INSERT INTO temp_dept_path (dept_path, dept_code)
WITH RECURSIVE dept_path_cte (dept_path, dept_code) AS (
SELECT CONCAT(unique_code, '/'), unique_code
FROM department
WHERE parent_code IS NULL
UNION ALL
SELECT CONCAT(cte.dept_path, d.unique_code, '/'), d.unique_code
FROM department d
JOIN dept_path_cte cte ON cte.dept_code = d.parent_code
)
SELECT dept_path, dept_code
FROM dept_path_cte;
```
4. 使用临时表和员工表进行关联,按照部门分组统计员工数量。
```mysql
SELECT d.unique_code AS dept_code, COUNT(*) AS employee_count
FROM temp_dept_path tp
JOIN department d ON tp.dept_code = d.unique_code
JOIN employee e ON FIND_IN_SET(d.unique_code, e.relation_codes)
GROUP BY d.unique_code;
```
最终的查询结果会按照部门的 unique_code 排序,并列出每个部门的 unique_code 和员工数量。
阅读全文