MySQL创建一个员工表和部门表的交叉表
时间: 2023-08-23 16:06:48 浏览: 61
交叉表(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语句对部门名称进行分组。
这样,我们就成功地创建了一个员工表和部门表的交叉表。