mysql统计每个部门的人数
时间: 2023-07-01 21:15:20 浏览: 2525
可以使用以下SQL语句统计每个部门的人数:
```
SELECT department, COUNT(*) as count
FROM employee
GROUP BY department;
```
其中,`employee`是员工表,包含`department`字段表示所在部门。`COUNT(*)`函数用于统计每个部门的人数,`GROUP BY`子句用于按照部门分组。最终输出结果包含`department`和`count`两个字段,表示每个部门的名称和人数。
相关问题
有两个表,一个员工表和一个部门表,mysql 实现按照部门编号进行分组,统计每个部门的人数,总月薪,平均月薪,最高月薪,最低月薪代码
在MySQL中,你可以使用`GROUP BY`、`COUNT()`, `SUM()`, `AVG()` 和 `MAX()`, `MIN()` 函数结合子查询或者直接在一个SQL语句中完成这个任务。这里是一个基本的例子:
```sql
SELECT
d.department_id,
d.department_name,
COUNT(e.employee_id) AS employee_count,
SUM(e.salary) AS total_salary,
AVG(e.salary) AS avg_salary,
MAX(e.salary) AS max_salary,
MIN(e.salary) AS min_salary
FROM
employees e
JOIN
departments d ON e.department_id = d.department_id
GROUP BY
d.department_id;
```
在这个查询中:
- `employees` 表代表员工表,`employee_id` 是员工ID,`salary` 是薪水。
- `departments` 表代表部门表,`department_id` 是部门编号,`department_name` 是部门名称。
- `JOIN` 连接了两个表,基于它们之间的部门ID关联。
- 使用`GROUP BY d.department_id` 将结果按部门ID分组,对每个部门执行聚合函数。
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 和员工数量。
阅读全文