-- 统计各部门加班员工占比:加班员工数/部门总员工数(保留1位小数百分比)
SELECT
st.department, -- 部门名称
-- 计算占比并格式化:round保留1位小数,concat拼接百分号
CONCAT(ROUND(COUNT(distinct at.staff_id) / COUNT(st.staff_id) * 100, 1), '%') AS ratio
FROM staff_tb st
-- LEFT JOIN:保留部门所有员工,仅关联满足加班条件的出勤记录
LEFT JOIN attendent_tb at
ON st.staff_id = at.staff_id -- 按员工ID关联
-- 加班条件:工作时长(小时)=(下班时间戳-上班时间戳)/3600,需>9.5小时
AND (UNIX_TIMESTAMP(at.last_clockin) - UNIX_TIMESTAMP(at.first_clockin)) / 3600 > 9.5
-- 按部门分组统计
GROUP BY st.department
-- 按加班占比降序排序
ORDER BY ratio DESC;