mysql有员工和部门表,部门表有父id和一个层级字段type(1:大区,2:运营中心,3-小组),统计所有type=2的部门和他的子集下面的员工数量
时间: 2024-03-05 17:47:54 浏览: 18
可以使用以下 SQL 语句来统计所有 type=2 的部门及其子集下面的员工数量:
```
SELECT COUNT(*)
FROM 员工表
WHERE 部门id IN (
SELECT id
FROM 部门表
WHERE type = 2
OR (type = 1 AND id IN (
SELECT id
FROM 部门表
WHERE type = 2
OR (type = 1 AND id IN (
SELECT id
FROM 部门表
WHERE type = 2
))
))
)
```
其中,`员工表`是指存储员工信息的表,`部门表`是指存储部门信息的表,`部门id`是员工表中表示所属部门的外键,`id`是部门表中的主键。这条 SQL 语句使用了嵌套子查询,先找出所有 type=2 的部门及其子集的 id,然后再查询员工表中所属部门为这些部门的员工数量,并返回统计结果。
相关问题
mysql有员工和部门表,部门表是父子结构还有层级,统计某个层级的部门下面所有员工数量
您好!针对您的问题,可以使用MySQL的递归查询来实现。具体的SQL语句如下:
```
WITH RECURSIVE cte AS (
SELECT dept_id FROM department WHERE dept_id = [指定的部门ID]
UNION ALL
SELECT department.dept_id FROM department JOIN cte ON department.parent_id = cte.dept_id
)
SELECT COUNT(*) FROM employee WHERE dept_id IN (SELECT dept_id FROM cte);
```
其中,`[指定的部门ID]`是您想要统计的部门ID,该语句会递归查询该部门的所有子部门及其子部门,然后统计这些部门下的所有员工数量。
希望这个答案能够帮助到您!
MySQL创建一个员工表和部门表的交叉表
交叉表(Cross Tabulation),也称为跨表或透视表(Pivot Table),可以将数据按照行列的组合方式进行统计分析,非常方便。在MySQL中可以通过使用SELECT语句中的CASE WHEN语句来实现交叉表的功能。
下面是一个创建员工表和部门表的交叉表的示例:
假设我们有一个员工表(employee)和一个部门表(department),其中员工表包含员工的ID、姓名和所属部门ID,部门表包含部门ID和部门名称。现在我们需要创建一个交叉表,统计每个部门中的员工人数。
首先,我们可以使用如下的查询语句来获取每个部门中的员工人数:
```
SELECT department.name AS department_name, COUNT(employee.id) AS employee_count
FROM employee
JOIN department ON employee.department_id = department.id
GROUP BY department.name
```
这个查询语句使用了JOIN语句将员工表和部门表连接起来,然后使用GROUP BY语句对部门名称进行分组,并使用COUNT函数统计每个部门中的员工数量。
接下来,我们可以使用CASE WHEN语句将每个部门的员工数量转换为交叉表的形式:
```
SELECT
department.name AS department_name,
SUM(CASE WHEN employee_count <= 10 THEN 1 ELSE 0 END) AS employee_count_1_10,
SUM(CASE WHEN employee_count > 10 AND employee_count <= 20 THEN 1 ELSE 0 END) AS employee_count_11_20,
SUM(CASE WHEN employee_count > 20 AND employee_count <= 30 THEN 1 ELSE 0 END) AS employee_count_21_30,
SUM(CASE WHEN employee_count > 30 THEN 1 ELSE 0 END) AS employee_count_31_plus
FROM (
SELECT department_id, COUNT(id) AS employee_count
FROM employee
GROUP BY department_id
) AS employee_count_table
JOIN department ON employee_count_table.department_id = department.id
GROUP BY department_name
```
这个查询语句中,我们首先使用了一个子查询来获取每个部门中的员工数量,然后使用CASE WHEN语句将员工数量按照不同的范围进行分类。最后,使用JOIN语句将部门名称和交叉表中的数据进行连接,并使用GROUP BY语句对部门名称进行分组。
这样,我们就成功地创建了一个员工表和部门表的交叉表。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)