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