这道题目要求我们统计公司所有课程参加培训的人次。我们需要从员工培训信息表中提取数据,计算每个员工参加的培训课程数量,并求和得到总的人次。下面是这个SQL查询的思路和实现步骤。
1. 确定总体问题
我们需要计算每个员工参加的培训课程数量,并求和得到总的人次。
2. 分析关键问题
- 处理空值:如果
course
字段为NULL,表示该员工没有参加任何课程。 - 计算课程数量:对于非空的
course
字段,计算课程数量。 - 求和:将所有员工的课程数量求和,得到总的人次。
3. 解决每个关键问题的代码及讲解
步骤1:处理空值
我们使用CASE WHEN
语句来处理course
字段为NULL的情况:
case
when course is null then 0
else length(course) - length(replace(course,',','')) + 1
end AS num
when course is null then 0
:如果course
字段为NULL,课程数量为0。else length(course) - length(replace(course,',','')) + 1
:计算课程数量。
步骤2:计算课程数量
对于非空的course
字段,计算课程数量:
length(course) - length(replace(course,',','')) + 1
length(course) - length(replace(course,',','')) + 1
:通过计算逗号的数量来确定课程数量。length(course)
计算字符串的总长度,replace(course,',','')
将逗号替换为空(即去掉逗号),原长度减去去掉逗号后的长度即为逗号的数量,加1得到课程数量。
步骤3:求和
将所有员工的课程数量求和,得到总的人次:
select
sum(num) AS staff_nums
sum(num) AS staff_nums
:对所有员工的课程数量求和,得到总的人次。
完整代码
select
sum(num) AS staff_nums
from(
select
case
when course is null then 0
else length(course) - length(replace(course,',','')) + 1
end AS num
from
cultivate_tb
) as sub