MySQL中如何将同一列值按百分比输出(附员工考勤示例)
统计MySQL员工考勤状态的百分比结果
嘿,这事儿好办!我来给你写个实用的MySQL查询语句,轻松算出员工考勤各状态的占比百分比~
首先得先明确下你的考勤表结构,我假设表名叫attendance,包含两个核心字段:
employee_id:员工ID(用来定位你要统计的员工1)status:考勤状态(1=出勤,2=缺勤,3=迟到)
针对员工1的5条记录,直接用下面的SQL就能算出各状态的百分比,还能自动保留两位小数,结果看着更清爽:
SELECT employee_id, ROUND(SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS `出勤占比(%)`, ROUND(SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS `缺勤占比(%)`, ROUND(SUM(CASE WHEN status = 3 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS `迟到占比(%)` FROM attendance WHERE employee_id = 1 GROUP BY employee_id;
代码解释:
SUM(CASE...):用条件判断统计每个状态的记录数,匹配到对应状态就加1,否则加0COUNT(*):获取该员工的总考勤记录数(这里就是5条)ROUND(..., 2):把计算出的百分比保留两位小数,避免出现一堆冗余小数位AS:给每个统计字段起个直观的别名,方便快速看懂结果
举个实际例子,如果员工1的5条记录是[1,1,2,3,1],运行这个SQL后会得到:
| employee_id | 出勤占比(%) | 缺勤占比(%) | 迟到占比(%) |
|---|---|---|---|
| 1 | 60.00 | 20.00 | 20.00 |
要是你想一次性统计所有员工的考勤占比,直接去掉WHERE employee_id = 1这句就行,查询结果会按每个员工分组展示。
内容的提问来源于stack exchange,提问作者hmamun
相关产品推荐
相关产品推荐

