完成指定数量课程对应认证资格的报表实现咨询
认证报表实现方案
前提说明
基于你给出的业务规则(用户完成6门不同课程即可获得认证)及表结构设定,先明确两个表的关联逻辑:
user表存储用户基础信息,course表存储所有用户的课程完成记录,两表通过用户姓名字段关联- 统计时需要对同一用户的同一课程完成记录去重,避免重复计数
核心统计逻辑(SQL实现)
你可以直接使用以下查询语句批量获取所有用户的认证状态:
SELECT u.*, COUNT(DISTINCT c.course_name) AS completed_course_num, CASE WHEN COUNT(DISTINCT c.course_name) >= 6 THEN '已认证' ELSE '未认证' END AS certification_status FROM user u LEFT JOIN course c ON u.user_name = c.user_name GROUP BY u.user_name
补充说明:如果你的
course表中存在唯一课程ID字段,建议将COUNT(DISTINCT c.course_name)替换为COUNT(DISTINCT c.course_id),统计准确性更高;如果确认不存在同一用户重复完成同一门课的记录,可去掉DISTINCT提升查询效率。
以你给出的Sally Smith示例验证:该用户在course表中有6条不同课程的完成记录,查询结果中completed_course_num为6,certification_status返回「已认证」,完全匹配业务规则要求。
前端展示建议
拿到查询结果后,可按以下规则在报表页展示:
- 已认证用户:高亮展示已认证标识,可同步展示用户已完成的全部课程明细
- 未认证用户:展示未认证标识,同时补充进度提示,如「已完成X门课程,还差Y门即可获得认证」
优化建议
如果后续业务迭代,推荐将两表的关联字段从「用户姓名」替换为用户唯一ID(如user_id),可以避免重名用户导致的统计错误。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

