答案 0 :(得分:2)
这是一个非常简单的方法:
select employee_id,
avg( present_id = 1 ) as present_ratio,
avg( present_id = 2 ) as absent_ratio,
avg( present_id = 3 ) as late_ratio
from t
group by employee_id;
这会产生一个介于0和1之间的数字的值。如果你真的需要一个百分比,你可以乘以100;我觉得这个比例更容易理解。
这使用MySQL扩展,其中布尔表达式的结果被视为数字上下文中的数字,0表示false,1表示true。更详细的方法使用ANSI标准功能:
avg(case when present_id = 1 then 1.0 else 0 end) as present_ratio