MySQL-嵌套使用 CASE 表达式
创建一张用于管理员工学习过的培训课程的表,如下所示:
CREATE TABLE stuCourses(
id INT NOT NULL,
stuname CHAR(20),
course CHAR(50)
);
插入数据。
利用上面这张表生成下面这样一张交叉表(“课程学习记录一览表”)。 ○表示已学习过,NULL 表示尚未学习。
嵌套使用 CASE 表达式完成
CASE 表达式可以
写在 SELECT 子句里的聚合函数内部,也可以写在聚合函数外部。这里,我们先把 SUM 函数的结果处理成 1 或者 NULL,然后在 外层的 CASE 表达式里将 1 转换成○。
SELECT stuname,
CASE WHEN SUM(CASE WHEN course = 'SQL入门' THEN 1 ELSE NULL END) = 1 THEN '○' ELSE NULL END AS "SQL入门",
CASE WHEN SUM(CASE WHEN course = 'UNIX基础' THEN 1 ELSE NULL END) = 1 THEN '○' ELSE NULL END AS "UNIX基础",
CASE WHEN SUM(CASE WHEN course = 'Java中级' THEN 1 ELSE NULL END) = 1 THEN '○' ELSE NULL END AS "Java中级 "
FROM stuCourses GROUP BY stuname;