这道题目要求我们统计公司所有课程参加培训的人次。我们需要从员工培训信息表中提取数据,计算每个员工参加的培训课程数量,并求和得到总的人次。下面是这个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

京公网安备 11010502036488号