如何用SQL统计不同月份各认证类别完成员工数(多表查询)
修正后的SQL查询语句(统计每月不同类别认证的员工数量)
前提假设表结构
基于业务场景合理推断三张表核心字段如下:
iep_start_lp_request:employee_id(员工ID)、completed_date(认证完成时间)、post_id(关联认证项ID)、status(认证状态,需为completed表示完成)iep_employee_list:id(员工主键ID)iep_postmeta:post_id(关联认证项ID)、meta_key(标识类别字段,如certification_category)、meta_value(认证类别名称)
修正后的查询语句
SELECT DATE_FORMAT(r.completed_date, '%Y-%m') AS 统计月份, pm.meta_value AS 认证类别, COUNT(DISTINCT el.id) AS 完成员工数量 FROM iep_start_lp_request r INNER JOIN iep_employee_list el ON r.employee_id = el.id INNER JOIN iep_postmeta pm ON r.post_id = pm.post_id WHERE r.status = 'completed' AND pm.meta_key = 'certification_category' GROUP BY DATE_FORMAT(r.completed_date, '%Y-%m'), pm.meta_value ORDER BY 统计月份 DESC, 认证类别;
关键修正点说明
- 去重统计员工:使用
COUNT(DISTINCT el.id)避免同一员工同一月份同一类别多次认证被重复计数 - 正确关联表:通过
employee_id关联员工基础表,post_id关联认证类别元数据表,确保数据关联逻辑准确 - 日期格式化分组:用
DATE_FORMAT将完成时间转换为YYYY-MM格式,实现按月维度统计 - 过滤有效数据:增加
status = 'completed'确保只统计已完成的认证,同时指定meta_key精准筛选出类别字段
内容的提问来源于stack exchange,提问作者Shahala Anjum
相关产品推荐
相关产品推荐

