统计答题的正确率(Mysql统计逗号隔开的字符)

针对员工答题活动的答题情况统计题目错误率,数据库中有员工答题表employee_question
employee_question
和标准答案表question_info
question_info
,可以看到,标准答案和答题情况都是用逗号隔开的字符串

SELECT 
    s.id + 1 as '题目编号',
    COUNT(*) as '答题参与次数',
    COUNT(if(e.answer != s.answer, 1, null)) as '错误次数',
    CONCAT(ROUND(COUNT(if(e.answer != s.answer, 1, null))/COUNT(*)*100,1),'','%') as '错误率'
FROM (
    SELECT
            help_topic_id as id, 
            SUBSTRING_INDEX(SUBSTRING_INDEX(answer,',',help_topic_id+1),',',-1) AS answer 
    FROM 
            mysql.help_topic,(SELECT * FROM employee_question GROUP BY employee_num,question_id) a
    WHERE 
            help_topic_id < LENGTH(answer) - LENGTH(REPLACE(answer, ',', ''))+1
    AND question_id = 2
)e LEFT JOIN (
    SELECT
            help_topic_id as id, 
            SUBSTRING_INDEX(SUBSTRING_INDEX(standard_answer,',',help_topic_id+1),',',-1) AS answer 
    FROM 
            mysql.help_topic,question_info
    WHERE 
            help_topic_id < LENGTH(standard_answer) - LENGTH(REPLACE(standard_answer, ',', ''))+1
    AND id = 2
)s ON e.id = s.id
GROUP BY s.id
ORDER BY ROUND(COUNT(if(e.answer != s.answer, 1, null))/COUNT(*)*100,1) DESC

实现的效果

执行结果

下面针对sql中涉及到的知识点做个总结

LENGTH(str)

参数 解释
str 字符串

REPLACE(str,substring,replacement)

参数 解释
str 字符串
substring 搜索字符串中指定的字符
replacement 替换的字符
LENGTH(`standard_answer`)-LENGTH(REPLACE(`standard_answer`, ',', ''))+1  #计算题目个数

SUBSTRING_INDEX(str,delim,count)

参数 解释
str 字符串
delim 分割符号
count 截取分隔符的个数,符号从后往前截取
SUBSTRING_INDEX('www.baidu.com', '.', 2)   //www.baidu
SUBSTRING_INDEX('www.baidu.com', '.', -1)  //com

help_topic是mysql数据库自带的一个有递增字段的表,最大可以到585,借助这个表的help_topic_id实现了循环截取answer,并且通过where条件限制了循环截取的次数

SELECT
    help_topic_id as id, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(standard_answer,',',help_topic_id+1),',',-1) AS answer 
FROM 
    mysql.help_topic,question_info
WHERE 
    help_topic_id < LENGTH(standard_answer) - LENGTH(REPLACE(standard_answer, ',', ''))+1
    AND id = 2
分割标准答案
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容