首页 > 试题广场 >

统计所有课程参加培训人次

[编程题]统计所有课程参加培训人次
  • 热度指数:38155 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
某公司员工培训信息数据如下:
员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程),如下所示:
注:该公司共开设了三门课程,员工可自愿原则性培训0-3项,每项课程每人可培训1次。
info_id staff_id course
101 1 course1,course2
102 2 course2
103 3 course1,course3
104 4 course1,course2,course3
105 5 course3
106 6 NULL
107 7 course1,course2
问题:请统计该公司所有课程参加培训人次?
示例数据结果如下:
staff_nums
11
解释:course1课程共有员工1、3、4、7共4名员工培训;
course2课程共有员工1、2、4、7共4名员工培训;
course3课程共有员工3、4、5共3名员工培训。
示例1

输入

drop table if exists  `staff_tb` ; 
CREATE TABLE `staff_tb` (
`staff_id` int(11) NOT NULL,
`staff_name` varchar(16) NOT NULL,
`staff_gender` char(8) NOT NULL,
`post` varchar(11) NOT NULL,
`department` varchar(16) NOT NULL,
PRIMARY KEY (`staff_id`));
INSERT INTO staff_tb VALUES(1,'Angus','male','Financial','dep1'); 
INSERT INTO staff_tb VALUES(2,'Cathy','female','Director','dep1'); 
INSERT INTO staff_tb VALUES(3,'Aldis','female','Director','dep2'); 
INSERT INTO staff_tb VALUES(4,'Lawson','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(5,'Carl','male','Engineer','dep2'); 
INSERT INTO staff_tb VALUES(6,'Ben','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(7,'Rose','female','Financial','dep2'); 

drop table if exists  `cultivate_tb` ;   
CREATE TABLE `cultivate_tb` (
`info_id` int(11) NOT NULL,
`staff_id` int(11) NOT NULL,
`course` varchar(32) NULL,
PRIMARY KEY (`info_id`));
INSERT INTO cultivate_tb VALUES(101,1,'course1,course2');
INSERT INTO cultivate_tb VALUES(102,2,'course2');
INSERT INTO cultivate_tb VALUES(103,3,'course1,course3');
INSERT INTO cultivate_tb VALUES(104,4,'course1,course2,course3');
INSERT INTO cultivate_tb VALUES(105,5,'course3');
INSERT INTO cultivate_tb VALUES(106,6,NULL);
INSERT INTO cultivate_tb VALUES(107,7,'course1,course2');

输出

staff_nums
11
头像 牛客题解官
发表于 2025-02-18 10:54:22
精华题解 这道题目要求我们统计公司所有课程参加培训的人次。我们需要从员工培训信息表中提取数据,计算每个员工参加的培训课程数量,并求和得到总的人次。下面是这个SQL查询的思路和实现步骤。 1. 确定总体问题 我们需要计算每个员工参加的培训课程数量,并求和得到总的人次。 2. 分析关键问题 处理空值:如果cou 展开全文
头像 拒绝996的小蜗牛很自信
发表于 2024-08-10 09:55:35
select sum(length(course)-length(replace(course,',',''))+1) as staff_nums from cultivate_tb
头像 zzzzzzy6_
发表于 2024-08-13 10:26:43
select sum(course1)+sum(course2)+sum(course3) as staff_nums from (select info_id, staff_id, if(course like '%1%',1,0) as course1, if( 展开全文
头像 烛少
发表于 2024-11-17 15:13:18
select sum(case when length(course)=7 then 1 when length(course)=15 then 2 when length(course)=23 then 3 else 0 end) staff_nums from cultivate_tb
头像 牛客556542194号
发表于 2024-08-14 16:01:14
select sum(num) staff_nums from (select count(*) num from cultivate_tb where course like ('%course1%') union all select count(*) num from cultiva 展开全文
头像 熊猫不如猫熊
发表于 2024-09-22 16:43:48
-- 计算所有员工在课程1、课程2和课程3中的总人数 SELECT SUM(course1) + SUM(course2) + SUM(course3) AS staff_nums -- 计算课程1、课程2和课程3的总人数 FROM ( -- 从 cultivate_tb 表中选 展开全文
头像 牛客673031368号
发表于 2024-08-26 15:25:09
SELECT SUM(CAST(course_number AS UNSIGNED)) AS staff_nums FROM( SELECT CASE WHEN course LIKE'course_,course_,course_' THEN '3' WHEN course LIKE'cours 展开全文
头像 梦梦冲啊
发表于 2025-02-27 16:02:00
#数,的个数来判断 select sum((length(course) - length(replace(course,',','')))+1) staff_nums from cultivate_tb
头像 当赤道留住雪花aiz
发表于 2024-08-14 22:17:05
with t1 as( select case when course like '%course1%' then 1 else 0 end as c1, case when course like '%course2%' then 1 else 0 end as c2 展开全文
头像 kiss轩轩
发表于 2024-08-28 15:43:29
select round( sum( ( length (course) - length (replace (course, ',', '')) ) / length (',') + 1 展开全文
头像 努力虚心学习
发表于 2025-05-05 20:35:37
union all暴力解题简单思路(跳过处理空值步骤直接分组求和,最后汇总个数即可):with tmp as(    select count(case when course like '%course1%' then 1 else NULL end) as course_nums    from 展开全文