相同的列值输出为mysql

时间:2018-03-11 16:41:27

标签: mysql sql aggregation

样本表:

enter image description here

此表有员工1的5个条目.1表示存在,2表示缺席,3表示迟到。我想要关注输出。

示例输出: enter image description here

1 个答案:

答案 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