pivot在MySQL中不可用,需要用到case语句来实现结果的转置。
case的使用方法可参考:【CASE语句的使用方法】||本博客的操作也将以这个例子为基础。
SELECT
"人数" AS typename,
COUNT(CASE WHEN departmentId = 501 THEN clerkName END) AS 销售,
COUNT(CASE WHEN departmentId = 502 THEN clerkName END) AS 研发,
COUNT(CASE WHEN departmentId = 503 THEN clerkName END) AS 客服
FROM (
SELECT TC.name AS clerkName, TD.`id` AS departmentId, TC.salary AS salary, TD.name AS departmentName
FROM t_clerk TC
RIGHT OUTER JOIN t_department TD
ON TC.`department_id` = TD.`id`
) innerTable
主要观察case语句的使用。
--为了让代码彩色显示只能把select和from都写完整
select
COUNT(CASE WHEN departmentId = 501 THEN clerkName END) AS 销售
from table
count()是数量,返回所选列所有记录的数量,即查数,【AS 销售】的作用是让查数结果以“销售”为字段。
count()中间的部分是由case语句来指定将哪些数据可以参与查数。
由于没有分组(group by),count会对表的所有记录进行遍历,然后记录共有多少个clerkName同一行的departmentId是501。
同理,这三个count()都会将属于各自部门的员工名分别查数,从而达到以部门名称为字段,以部门人数为值的查询结果。相比于直接查询后以列表示的结果,相当于转置表。